[
  {
    "uri": "features/untrusted_partitions.feature",
    "id": "untrusted-partitions",
    "keyword": "Feature",
    "name": "Untrusted partitions",
    "description": "  As a Tails user\n  I don't want to touch other media than the one Tails runs from",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "untrusted-partitions;tails-ignores-a-swap-volume-and-another-tails-that-are-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "Tails ignores a swap volume and another Tails that are on an internal hard drive",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19235
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 31360388
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 424570043
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"swap\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 94246411
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt swap partition on disk \"swap\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4884397013
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"swap\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1033802524
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"live_hd\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 31568456
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"live_hd\"",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 13059864763
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"live_hd\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1024712680
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails with network unplugged and I login",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 44699618429
            }
          },
          {
            "keyword": "Then ",
            "name": "a \"swap\" partition was detected by Tails on drive \"swap\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 59182165
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is detected by Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 66247342
            }
          },
          {
            "keyword": "But ",
            "name": "Tails has no disk swap enabled",
            "line": 17,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 33564669
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is not mounted",
            "line": 18,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 44209177
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 658774404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 101117917
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-a-non-removable-usb-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on a non-removable USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15599
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1264730
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 82551094
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19011626
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 17215055420
            }
          },
          {
            "keyword": "And ",
            "name": "I plug non-removable USB drive \"fake_TailsData\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1024905224
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 651140054
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29222822043
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 52775566
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 13776491635
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 781043802
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7175574
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on an internal hard drive",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13887
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1224676
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 80600169
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 22751545
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 17915344086
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"fake_TailsData\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1031014763
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 679051603
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29102433634
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 50525361
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 13261665009
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 681753746
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6557348
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;booting-tails-does-not-automount-untrusted-partitions",
        "keyword": "Scenario",
        "name": "Booting Tails does not automount untrusted partitions",
        "description": "",
        "line": 40,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10067
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1158762
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 79796616
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"gpt_ext2\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 20608005
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with an ext2 filesystem on disk \"gpt_ext2\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2578747661
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"gpt_ext2\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1022975296
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"msdos_fat32\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 22674391
            }
          },
          {
            "keyword": "And ",
            "name": "I create an msdos partition with a vfat filesystem on disk \"msdos_fat32\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 3064204759
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"msdos_fat32\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1056813827
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 44673521288
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"gpt_ext2\" is detected by Tails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 61773919
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"gpt_ext2\" is not mounted",
            "line": 50,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 60071221
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is detected by Tails",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 45699717
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is not mounted",
            "line": 52,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 38599163
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 904480680
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5189216
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/flatpak.feature",
    "id": "installing-and-running-flatpak-apps-in-tails",
    "keyword": "Feature",
    "name": "Installing and running Flatpak apps in Tails",
    "description": "  As a Tails user\n  I may want to install and run software not shipped in Tails or Debian\n  And keep them up-to-date",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-and-running-flatpak-apps-in-tails;gnome-software-does-not-have-the-debian-plugin",
        "keyword": "Scenario",
        "name": "GNOME Software does not have the Debian plugin",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11101
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1017039
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 46116
            }
          },
          {
            "keyword": "Then ",
            "name": "Debian package gnome-software-plugin-deb is not installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 36683229
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 619370753
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 17793
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;gnome-software-does-not-start-until-tor-is-ready",
        "keyword": "Scenario",
        "name": "GNOME Software does not start until Tor is ready",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 6963
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1525127
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 10885437
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network with the Flatpak feature from a USB drive with a persistent partition enabled and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 184321073321
            }
          },
          {
            "keyword": "Then ",
            "name": "process \"gnome-software\" is not running",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 78653197
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start GNOME Software",
            "line": 15,
            "match": {
              "location": "features/step_definitions/flatpak.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 49855954
            }
          },
          {
            "keyword": "Then ",
            "name": "I see an error about GNOME Software requiring Tor to be ready",
            "line": 16,
            "match": {
              "location": "features/step_definitions/flatpak.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 620945499
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1209431326
            }
          },
          {
            "keyword": "And ",
            "name": "process \"gnome-software\" is not running",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 49791002
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 38751716
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10605359213
            }
          },
          {
            "keyword": "Then ",
            "name": "process \"gnome-software\" is running within 10 seconds",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:869"
            },
            "result": {
              "status": "passed",
              "duration": 57269010
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 566660909
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 766234860
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9893858
            }
          }
        ]
      },
      {
        "id": "installing-and-running-flatpak-apps-in-tails;installing,-starting-and-uninstalling-a-flatpak",
        "keyword": "Scenario",
        "name": "Installing, starting and uninstalling a Flatpak",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18765
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1453463
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1354789
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails with the Flatpak feature from a USB drive with a persistent partition enabled and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 139987454972
            }
          },
          {
            "keyword": "When ",
            "name": "I start GNOME Software",
            "line": 26,
            "match": {
              "location": "features/step_definitions/flatpak.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 2466600670
            }
          },
          {
            "keyword": "And ",
            "name": "I install Signal Desktop using GNOME Software",
            "line": 27,
            "match": {
              "location": "features/step_definitions/flatpak.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 8503901499
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is installed after at most 600 seconds",
            "line": 28,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 48388506491
            }
          },
          {
            "keyword": "When ",
            "name": "I start the org.signal.Signal Flatpak",
            "line": 29,
            "match": {
              "location": "features/step_definitions/flatpak.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 149261335
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is running",
            "line": 30,
            "match": {
              "location": "features/step_definitions/flatpak.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 2278076032
            }
          },
          {
            "keyword": "Given ",
            "name": "I kill the org.signal.Signal Flatpak",
            "line": 31,
            "match": {
              "location": "features/step_definitions/flatpak.rb:77"
            },
            "result": {
              "status": "passed",
              "duration": 3346348631
            }
          },
          {
            "keyword": "And ",
            "name": "I go to the main screen of GNOME Software",
            "line": 32,
            "match": {
              "location": "features/step_definitions/flatpak.rb:45"
            },
            "result": {
              "status": "passed",
              "duration": 85430288
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall Signal Desktop using GNOME Software",
            "line": 33,
            "match": {
              "location": "features/step_definitions/flatpak.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 7125198439
            }
          },
          {
            "keyword": "Then ",
            "name": "the org.signal.Signal Flatpak is uninstalled after at most 60 seconds",
            "line": 34,
            "match": {
              "location": "features/step_definitions/flatpak.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 92871980
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 8263146339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1146094191
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 46169078
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/root_access_control.feature",
    "id": "root-access-control-enforcement",
    "keyword": "Feature",
    "name": "Root access control enforcement",
    "description": "  As a Tails user, I can perform administrative tasks only by using\n  the password I have optionally set up in the Welcome Screen",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "root-access-control-enforcement;i-can-perform-administrative-tasks-if-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I can perform administrative tasks if I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18825
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6531983
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in with an administration password",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 92022188345
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 8,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 84196455
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with sudo",
            "line": 9,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 72825907
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with pkexec",
            "line": 10,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 6597969158
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1018973401
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6642582
            }
          }
        ]
      },
      {
        "id": "root-access-control-enforcement;i-cannot-perform-administrative-tasks-unless-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I cannot perform administrative tasks unless I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15068
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2056859
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 33747382606
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 14,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 68729767
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot run a command as root with sudo and the standard passwords",
            "line": 15,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:8"
            },
            "result": {
              "status": "passed",
              "duration": 195585234
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot run a command as root with pkexec and the standard passwords",
            "line": 16,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 17733916205
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot login as root using su with the standard passwords",
            "line": 17,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 27071667420
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 831335228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21681
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/time_syncing.feature",
    "id": "time-syncing",
    "keyword": "Feature",
    "name": "Time syncing",
    "description": "  As a Tails user\n  I want Tor to work properly\n  And for that I need a reasonably accurate system clock",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "time-syncing;clock-with-host's-time",
        "keyword": "Scenario",
        "name": "Clock with host's time",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19005
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 8950881
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3453458
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6471439301
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34758514
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 12775838823
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 11,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 34390487
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 235125275
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 606716328
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 91291
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-with-host's-time-while-using-bridges",
        "keyword": "Scenario",
        "name": "Clock with host's time while using bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12382
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3527275
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2355948
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6415709625
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32034010
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1764850862
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11790370574
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1236950872
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 19,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 39162839
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 199569790
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 740337233
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 88515
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-is-one-day-in-the-future-while-using-obfs4-bridges",
        "keyword": "Scenario",
        "name": "Clock is one day in the future while using obfs4 bridges",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3622774
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2157389
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6319240844
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+1 day\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 165752700
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4629964
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 43584504
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1777564991
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in easy mode",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11745424636
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1136164974
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 29,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 33279261
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 30,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 332582918
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 221016661
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 892460340
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 55079985
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-system-time-is-not-synced-to-the-hardware-clock",
        "keyword": "Scenario",
        "name": "The system time is not synced to the hardware clock",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15478
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3369697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 4301542
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6417473746
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"-15 days\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 219153005
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:963"
            },
            "result": {
              "status": "passed",
              "duration": 10106029
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 42485871712
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails' hardware clock is close to the host system's time",
            "line": 38,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 695346225
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 263018065
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 554682605
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26204737
            }
          }
        ]
      },
      {
        "id": "time-syncing;anti-test:-changes-to-the-hardware-clock-are-kept-when-rebooting",
        "keyword": "Scenario",
        "name": "Anti-test: Changes to the hardware clock are kept when rebooting",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 40
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18574
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3512900
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2268937
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6367390176
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the hardware clock's time with \"-15 days\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1776843832
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:963"
            },
            "result": {
              "status": "passed",
              "duration": 5774652
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 43260822600
            }
          },
          {
            "keyword": "Then ",
            "name": "the hardware clock is still off by \"-15 days\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:157"
            },
            "result": {
              "status": "passed",
              "duration": 745168742
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 213592736
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 813084485
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 31603827
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-clock-is-set-to-the-source-date-when-the-hardware-clock-is-way-in-the-past",
        "keyword": "Scenario",
        "name": "The clock is set to the source date when the hardware clock is way in the past",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17512
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3820434
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 7526603
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 79938370
            }
          },
          {
            "keyword": "And ",
            "name": "the hardware clock is set to \"01 Jan 2000 12:34:56\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:176"
            },
            "result": {
              "status": "passed",
              "duration": 11922400
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 575059191
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 29554096957
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is just past Tails' source date",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:116"
            },
            "result": {
              "status": "passed",
              "duration": 45678015
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 245704780
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 675755581
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 17687264
            }
          }
        ]
      },
      {
        "id": "time-syncing;on-a-clock-with-host's-time,-tor-connection-works-even-if-time-sync-fails",
        "keyword": "Scenario",
        "name": "On a clock with host's time, Tor Connection works even if time sync fails",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16000
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2745506
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2515687
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6348098118
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects times out",
            "line": 57,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1076309347
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 39955098
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 17381141065
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 60,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 34015251
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 235019570
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 768198639
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 549446
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-manually-recover-from-time-sync-failure-when-connecting-automatically-to-obfs4-bridges-with-a-clock-east-of-utc",
        "keyword": "Scenario",
        "name": "I can manually recover from time sync failure when connecting automatically to obfs4 bridges with a clock East of UTC",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12604
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2404720
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2509115
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6107834495
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 153724092
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 3821135285
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3382675
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects fails",
            "line": 67,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 62560217
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 23209836
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1685195281
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant in easy mode without connecting",
            "line": 70,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 5135501866
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1245126269
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 15749437550
            }
          },
          {
            "keyword": "Then ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 74,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 73
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 14936864849
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 75,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 307528153
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1085401454
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 5070901017
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or fake connectivity check service",
            "line": 78,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 350461283
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 80,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 53898656
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 313421044
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 567211346
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 49950402
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-connect-to-obfs4-bridges-having-a-clock-east-of-utc-while-hiding-that-i-am-using-tor",
        "keyword": "Scenario",
        "name": "I can connect to obfs4 bridges having a clock East of UTC while hiding that I am using Tor",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15890
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2401263
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1678272
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6266322972
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 104742561
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 3789324872
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 12760445
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27647961
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 88,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1824409058
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 90,
            "comments": [
              {
                "value": "# Anti-test: Users east of UTC can't connect to obfs4 bridges",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4253810742
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 91,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1258180327
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 11564956346
            }
          },
          {
            "keyword": "When ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 94,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 93
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 14897185918
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 95,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 324201138
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 20 minutes incorrect in \"+08:00\"",
            "line": 97,
            "comments": [
              {
                "value": "# \"Asia/Shanghai\" is UTC+08:00 all year long (no DST)",
                "line": 96
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 155935518
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1125511741
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6109299612
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 100,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 438326062
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 102,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 73380439
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 5 minutes incorrect in \"+08:00\"",
            "line": 103,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 275152730
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 231909771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 917253902
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 45644544
            }
          }
        ]
      },
      {
        "id": "time-syncing;time-sync-before-tor-connects-sets-the-same-headers-as-the-networkmanager-connectivity-check",
        "keyword": "Scenario",
        "name": "Time sync before Tor connects sets the same headers as the NetworkManager connectivity check",
        "description": "",
        "line": 105,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11952
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2950578
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 5393471
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 106,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6425098534
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects uses a fake connectivity check service",
            "line": 107,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1079579322
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34122751
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 8005690382
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 110,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 230491
            }
          },
          {
            "keyword": "When ",
            "name": "I make NetworkManager perform a connectivity check",
            "line": 111,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 316367346
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 112,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 216094
            }
          },
          {
            "keyword": "And ",
            "name": "the HTTP requests received by the fake connectivity check service are identical",
            "line": 113,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 3740594
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 250428680
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 616631135
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 939735
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_bridges.feature",
    "id": "using-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using Tor bridges and pluggable transports\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14307
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2381829
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6518836812
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2581051
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26534443
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2338743136
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-normal-bridges",
        "keyword": "Scenario",
        "name": "Using normal bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11165883558
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 979063149
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4926137
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1071994553
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 18,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 384684011
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 826699276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 54266051
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8887
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2156847
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6526698202
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3513790
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31990530
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1892381854
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10258738690
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 964739666
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4696518
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1096444633
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 501444818
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1263622556
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 43487297
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16100
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2501062
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6325741431
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2739115
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32098471
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1864724755
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports-from-a-qr-code",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports from a QR code",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 30631125950
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 989077692
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 30,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 5574297
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 43805185
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 480635949
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 811127068
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 52103617
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14286
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2242017
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6535199539
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2430008
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28042797
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1856590674
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;default-tor-bridges",
        "keyword": "Scenario",
        "name": "Default Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 34
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10662601357
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1130259520
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 355548202
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 5684532
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1076368335
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 266862574
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 42,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 344975010
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 865508768
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 47743177
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2729996
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6373150903
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2712013
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34638310
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1863556778
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;fall-back-to-default-bridges-if-failing-to-connect-directly-to-the-tor-network",
        "keyword": "Scenario",
        "name": "Fall back to default bridges if failing to connect directly to the Tor network",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network is blocked",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 986374146
            }
          },
          {
            "keyword": "When ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 20083167310
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 867146301
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 5065067
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1070552749
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 274925039
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 51,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 415053530
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 716169175
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 33489914
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13364
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2923008
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6313202073
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3921610
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 40047124
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2053476158
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tca-can-reconnect-after-a-connection-failure",
        "keyword": "Scenario",
        "name": "TCA can reconnect after a connection failure",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1245148347
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure a direct connection in the Tor Connection Assistant",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:789"
            },
            "result": {
              "status": "passed",
              "duration": 29149198411
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 102679326
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf is empty",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:1188"
            },
            "result": {
              "status": "passed",
              "duration": 275427046
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 824528206
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1099997951
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 4926195533
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 4552009
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1072957377
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 63,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 384182406
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 714236294
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 78865881
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15249
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2200318
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6224481771
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3449911
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36230067
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2020628946
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;normal-bridges-are-not-allowed-in-\"hide\"-mode",
        "keyword": "Scenario",
        "name": "Normal bridges are not allowed in \"Hide\" mode",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 65
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I try to configure some normal bridges in the Tor Connection Assistant in hide mode",
            "line": 67,
            "match": {
              "location": "features/step_definitions/tor.rb:801"
            },
            "result": {
              "status": "passed",
              "duration": 3850130265
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant complains that normal bridges are not allowed",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:939"
            },
            "result": {
              "status": "passed",
              "duration": 212523582
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot click the \"Connect to Tor\" button",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:965"
            },
            "result": {
              "status": "passed",
              "duration": 221070518
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 855376209
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 46249722
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14978
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3018445
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6480806134
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2633026
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31710199
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1854265579
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;the-same-tor-configuration-is-applied-when-the-network-is-reconnected",
        "keyword": "Scenario",
        "name": "The same Tor configuration is applied when the network is reconnected",
        "description": "",
        "line": 71,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 5297650255
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1544836427
            }
          },
          {
            "keyword": "When ",
            "name": "I disconnect the network through GNOME",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10615938137
            }
          },
          {
            "keyword": "And ",
            "name": "I connect the network through GNOME",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10106266295
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 69841778
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant connects to Tor",
            "line": 77,
            "match": {
              "location": "features/step_definitions/tor.rb:430"
            },
            "result": {
              "status": "passed",
              "duration": 145844335
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 857400795
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is using the same configuration as before",
            "line": 79,
            "match": {
              "location": "features/step_definitions/tor.rb:1178"
            },
            "result": {
              "status": "passed",
              "duration": 84137
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 46322279
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 81,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 402640447
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 682431546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 48196288
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20318
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2387067
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6411982415
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4106767
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 47793124
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1955091486
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;reconnecting-from-an-unblocked-network-to-a-blocked-network-displays-an-error",
        "keyword": "Scenario",
        "name": "Reconnecting from an unblocked network to a blocked network displays an error",
        "description": "",
        "line": 83,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 84,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 4282794190
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1772065427
            }
          },
          {
            "keyword": "And ",
            "name": "I disconnect the network through GNOME",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 10771965046
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are blocked",
            "line": 87,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1287567195
            }
          },
          {
            "keyword": "When ",
            "name": "I connect the network through GNOME",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 9002003507
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 89,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 30881427292
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 878235661
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 40800698
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9738
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2979752
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6364288253
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3250038
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33934748
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1926953447
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tor-connection-honors-my-choice-of-using-default-bridges-on-retry,-too",
        "keyword": "Scenario",
        "name": "Tor Connection honors my choice of using default bridges on retry, too",
        "description": "",
        "line": 91,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1224968385
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure some default bridges in the Tor Connection Assistant",
            "line": 93,
            "match": {
              "location": "features/step_definitions/tor.rb:789"
            },
            "result": {
              "status": "passed",
              "duration": 21190344574
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 94,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 71978432
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 95,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1144231042
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 96,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1084247342
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 7065845137
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 244527282
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 99,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 316810153
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 449727006
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 60548623
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15399
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3009338
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6223700301
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3379109
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 41361344
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1860499336
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-mocked-bridge-settings-with-automatic-region-detection-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for mocked bridge settings with automatic region-detection in Tor Connection",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with the default bridges",
            "line": 102,
            "match": {
              "location": "features/step_definitions/tor.rb:823"
            },
            "result": {
              "status": "passed",
              "duration": 141344408
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 103,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 6030291649
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 6997727282
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 46029129
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor is configured to use the default bridges",
            "line": 106,
            "match": {
              "location": "features/step_definitions/tor.rb:1159"
            },
            "result": {
              "status": "passed",
              "duration": 283799518
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 107,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 433085240
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 614396498
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 66417642
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18925
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2680203
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6294293657
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 2952722
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30553999
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2210329123
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-bridge-settings-but-receiving-a-mocked-api-error-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for bridge settings but receiving a mocked API error in Tor Connection",
        "description": "",
        "line": 109,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with an API error",
            "line": 110,
            "match": {
              "location": "features/step_definitions/tor.rb:843"
            },
            "result": {
              "status": "passed",
              "duration": 10623041
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 111,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 5605449487
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 112,
            "match": {
              "location": "features/step_definitions/tor.rb:914"
            },
            "result": {
              "status": "passed",
              "duration": 90080225
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant reports the Moat API error",
            "line": 113,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 2870471181
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 859856552
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 43221918
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12263
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2488666
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6494928126
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3239718
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 41481947
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1735110159
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-real-bridge-settings-for-the-usa-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for real bridge settings for the USA in Tor Connection",
        "description": "",
        "line": 115,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "no bridges are configured in torrc",
            "line": 116,
            "match": {
              "location": "features/step_definitions/tor.rb:1285"
            },
            "result": {
              "status": "passed",
              "duration": 8654286
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings for \"United States of America\"",
            "line": 117,
            "match": {
              "location": "features/step_definitions/tor.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 6671749679
            }
          },
          {
            "keyword": "Then ",
            "name": "some real world bridges are eventually configured in torrc",
            "line": 118,
            "match": {
              "location": "features/step_definitions/tor.rb:1289"
            },
            "result": {
              "status": "passed",
              "duration": 1494575731
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 846585019
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44122967
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/erase_memory.feature",
    "id": "system-memory-erasure-on-shutdown",
    "keyword": "Feature",
    "name": "System memory erasure on shutdown",
    "description": "  As a Tails user\n  when I shutdown Tails\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-memory-freed-by-killed-userspace-processes",
        "keyword": "Scenario",
        "name": "Erasure of memory freed by killed userspace processes",
        "description": "",
        "line": 13,
        "type": "scenario",
        "comments": [
          {
            "value": "# These tests rely on the Linux kernel's memory poisoning features.",
            "line": 7
          },
          {
            "value": "# The feature is called \"on shutdown\" as this is the security guarantee",
            "line": 8
          },
          {
            "value": "# we document, but in practice we test that some important bits of memory",
            "line": 9
          },
          {
            "value": "# are erased _before_ shutdown, while for some others we really test",
            "line": 10
          },
          {
            "value": "# behavior at shutdown time.",
            "line": 11
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 29626
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6709275
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6419152842
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 15,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 318475165
            }
          },
          {
            "keyword": "When ",
            "name": "I start a process allocating 128 MiB of memory with a known pattern",
            "line": 16,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:84"
            },
            "result": {
              "status": "passed",
              "duration": 2237977761
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 127 MiB in the guest's memory",
            "line": 18,
            "comments": [
              {
                "value": "# Since Debian Trixie we only get 99.610% coverage (tails#21012)",
                "line": 17
              }
            ],
            "output": [
              "Pattern coverage: 100.395% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 3087679901
            }
          },
          {
            "keyword": "When ",
            "name": "I kill the allocating process",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 730586498
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 5 seconds",
            "line": 20,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1477 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 7739846936
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 773219715
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19225
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-tmpfs-data-on-unmount",
        "keyword": "Scenario",
        "name": "Erasure of tmpfs data on unmount",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2048855
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6354828955
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 24,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 239213143
            }
          },
          {
            "keyword": "And ",
            "name": "I find very few patterns in the guest's memory",
            "line": 25,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2642818751
            }
          },
          {
            "keyword": "When ",
            "name": "I mount a 128 MiB tmpfs on \"/mnt\" and fill it with a known pattern",
            "line": 26,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 1442206980
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 27,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 3244221584
            }
          },
          {
            "keyword": "When ",
            "name": "I umount \"/mnt\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 433696817
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 29,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5806159459
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 568137035
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19987
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-vfat",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: vfat",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9558
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2163849
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6341560331
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 278684964
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1581"
            },
            "result": {
              "status": "passed",
              "duration": 5255665678
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 35,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1464 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2652287816
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 37,
            "comments": [
              {
                "value": "# write cache",
                "line": 36
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2775613123
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 75% of the test FS size in the guest's memory",
            "line": 38,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 3075086753
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1619"
            },
            "result": {
              "status": "passed",
              "duration": 705543299
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 40,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1464 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5705663900
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 42,
            "comments": [
              {
                "value": "# read cache",
                "line": 41
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1614"
            },
            "result": {
              "status": "passed",
              "duration": 176444636
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 43,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 537770120
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 44,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2921791550
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1619"
            },
            "result": {
              "status": "passed",
              "duration": 524007278
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 46,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1464 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5714180597
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 507049091
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 339404
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: LUKS-encrypted ext4",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16882
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2551123
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6358605465
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 287981818
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1581"
            },
            "result": {
              "status": "passed",
              "duration": 29234536199
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 52,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1472 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4111644578
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 54,
            "comments": [
              {
                "value": "# write cache",
                "line": 53
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 1367235527
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 55,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 4821358267
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1619"
            },
            "result": {
              "status": "passed",
              "duration": 408834705
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 57,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1472 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 7405097973
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 59,
            "comments": [
              {
                "value": "# read cache",
                "line": 58
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1614"
            },
            "result": {
              "status": "passed",
              "duration": 3999745682
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 60,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 436209176
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 61,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 4803659328
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1619"
            },
            "result": {
              "status": "passed",
              "duration": 387778812
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 63,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1472 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 7468025308
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 610745765
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 479025
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-the-overlayfs-read-write-branch-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of the overlayfs read-write branch on shutdown",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12543
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2664133
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 66,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6394208004
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 67,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 334082508
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 68,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 12337460397
            }
          },
          {
            "keyword": "And ",
            "name": "I drop all kernel caches",
            "line": 70,
            "comments": [
              {
                "value": "# ensure the pattern is in memory due to tmpfs, not to disk cache",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 1497341289
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 71,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2111631121
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 72,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 5195347
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 73,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1463 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20772221391
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3688211438
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22092
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-of-persistent-data-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches of persistent data on shutdown",
        "description": "",
        "line": 75,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14157
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2723193
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 76,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 229226437329
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 77,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 273910889
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 78,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 9785194762
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 79,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 4555544
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 80,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1485 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 21170257276
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3743996807
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11374553
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_install.feature",
    "id": "installing-tails-to-a-usb-drive",
    "keyword": "Feature",
    "name": "Installing Tails to a USB drive",
    "description": "  As a Tails user\n  I want to install Tails to a suitable USB drive",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-tails-to-a-usb-drive;try-installing-tails-to-a-too-small-usb-drive-with-gpt-and-a-fat-partition",
        "keyword": "Scenario",
        "name": "Try installing Tails to a too small USB drive with GPT and a FAT partition",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16090
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2148761
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6404049632
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 4 GiB disk named \"gptfat\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 36159547
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"gptfat\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2864771257
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"gptfat\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2195097432
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails Installer",
            "line": 12,
            "match": {
              "location": "features/step_definitions/usb.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 9280966211
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told by Tails Installer that the destination device \"is too small\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/usb.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 17754161
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 875843717
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 1013121
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;detecting-when-a-target-usb-drive-is-inserted-or-removed",
        "keyword": "Scenario",
        "name": "Detecting when a target USB drive is inserted or removed",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2397515
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6224930533
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 35970754
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails Installer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/usb.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 8184147933
            }
          },
          {
            "keyword": "But ",
            "name": "a suitable USB device is not found",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:173"
            },
            "result": {
              "status": "passed",
              "duration": 11046460
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2234573893
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"temp\" USB drive is selected",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:179"
            },
            "result": {
              "status": "passed",
              "duration": 37051592
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"temp\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 160010293
            }
          },
          {
            "keyword": "Then ",
            "name": "a suitable USB device is not found",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:173"
            },
            "result": {
              "status": "passed",
              "duration": 34392128
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 770754584
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 332482
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9397
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2614761
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6390825300
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 22199007
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2820464541
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2224340308
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 30,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 98266552603
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 15568897080
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2497569358
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 53019027
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1187058578
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 138251707
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 70032
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6294740
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7908548212
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 40121723
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2194636520
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 100480420368
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 16186599293
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 41,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2524728979
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 60006703
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1037691877
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 113469751
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive,-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive, cloning the Persistent Storage",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14828
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2544059
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8278329132
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 59632014
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 29504155
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2799859869
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2197622005
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails with Persistent Storage to USB drive \"install\" by cloning",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 116962267795
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 19387846579
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2784702884
            }
          },
          {
            "keyword": "And ",
            "name": "there is a persistence partition on USB drive \"install\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:619"
            },
            "result": {
              "status": "passed",
              "duration": 43181940
            }
          },
          {
            "keyword": "And ",
            "name": "the USB drive \"install\" contains the same files as my persistent storage",
            "line": 54,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 3043568729
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 784596764
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 126239928
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive,-without-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive, without cloning the Persistent Storage",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16581
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2902207
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8177436336
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 36532405
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2231063546
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 111752920213
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 18518302263
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 62,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2956320037
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 48246648
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 769955909
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 115333900
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;re-installing-tails-over-an-existing-usb-installation-with-a-persistent-partition",
        "keyword": "Scenario",
        "name": "Re-installing Tails over an existing USB installation with a persistent partition",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2759330
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 70,
            "comments": [
              {
                "value": "# We reach this first checkpoint only to ensure that the ' __internal' disk has reached the state (Tails installed + persistent partition set up) we need before we clone it below.",
                "line": 66
              },
              {
                "value": "# This first part is done without Tails Installer (install from Tails USB image)",
                "line": 67
              },
              {
                "value": "# Note: the \"__internal\" disk will keep its state across scenarios",
                "line": 68
              },
              {
                "value": "# and features until one of its snapshots is restored.",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8004021062
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6735331561
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"install\"",
            "line": 72,
            "match": {
              "location": "features/step_definitions/usb.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 669472804
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2234219145
            }
          },
          {
            "keyword": "When ",
            "name": "I reinstall Tails to USB drive \"install\" by cloning",
            "line": 75,
            "comments": [
              {
                "value": "# This second part is done with Tails Installer, that's what this scenario is about",
                "line": 74
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 112715037839
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 15896666419
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 77,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2701470106
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 41920120
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 748564001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 116835741
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;booting-tails-from-a-usb-drive-in-uefi-mode",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive in UEFI mode",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@uefi",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15539
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2487043
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8316069299
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 236895629
            }
          },
          {
            "keyword": "And ",
            "name": "the computer is set to boot in UEFI mode",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 17404913
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 59185372935
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 241700283
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 2275903487
            }
          },
          {
            "keyword": "And ",
            "name": "Tails has started in UEFI mode",
            "line": 88,
            "match": {
              "location": "features/step_definitions/usb.rb:1220"
            },
            "result": {
              "status": "passed",
              "duration": 43811183
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 903934670
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37457011
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-gnome-disks-from-a-usb-image",
        "keyword": "Scenario",
        "name": "Installing Tails with GNOME Disks from a USB image",
        "description": "",
        "line": 90,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 37039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2942935
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 91,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6450409109
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a Tails USB image",
            "line": 92,
            "match": {
              "location": "features/step_definitions/usb.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 22974882024
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"usbimage\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 32684209
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"usbimage\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2223876115
            }
          },
          {
            "keyword": "And ",
            "name": "I install a Tails USB image to the 7200 MiB disk with GNOME Disks",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:1559"
            },
            "result": {
              "status": "passed",
              "duration": 30877897367
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 966915821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 114151262
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;the-system-partition-is-updated-when-booting-from-a-usb-drive-where-a-tails-usb-image-was-copied",
        "keyword": "Scenario",
        "name": "The system partition is updated when booting from a USB drive where a Tails USB image was copied",
        "description": "",
        "line": 98,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing Tails with GNOME Disks from a USB image",
            "line": 97
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20818
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3230452
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 93121331
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"usbimage\" with network unplugged and I login",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 72004914713
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"usbimage\"",
            "line": 101,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 182302968
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the system partition on \"usbimage\" is \"Tails\"",
            "line": 102,
            "match": {
              "location": "features/step_definitions/usb.rb:1460"
            },
            "result": {
              "status": "passed",
              "duration": 180051975
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" is an EFI system partition",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:1468"
            },
            "result": {
              "status": "passed",
              "duration": 150483328
            }
          },
          {
            "keyword": "And ",
            "name": "the FAT filesystem on the system partition on \"usbimage\" is at least 4000M large",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:1477"
            },
            "result": {
              "status": "passed",
              "duration": 87807064
            }
          },
          {
            "keyword": "And ",
            "name": "the UUID of the FAT filesystem on the system partition on \"usbimage\" was randomized",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1505"
            },
            "result": {
              "status": "passed",
              "duration": 42389590
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the FAT filesystem on the system partition on \"usbimage\" is \"TAILS\"",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1522"
            },
            "result": {
              "status": "passed",
              "duration": 40015108
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" has the expected flags",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1539"
            },
            "result": {
              "status": "passed",
              "duration": 43571938
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 875992994
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6165370
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/additional_software_packages.feature",
    "id": "additional-software",
    "keyword": "Feature",
    "name": "Additional software",
    "description": "  As a Tails user\n  I may want to install software not shipped in Tails\n  And have them installed automatically when I enable persistence in the Greeter",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "additional-software;i-am-warned-i-can-not-use-additional-software-when-i-start-tails-from-a-dvd-and-install-a-package",
        "keyword": "Scenario",
        "name": "I am warned I can not use Additional Software when I start Tails from a DVD and install a package",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 13
          },
          {
            "name": "@fragile",
            "line": 13
          },
          {
            "name": "@doc",
            "line": 13
          }
        ],
        "comments": [
          {
            "value": "# An issue with this feature is that scenarios depend on each",
            "line": 8
          },
          {
            "value": "# other. When editing this feature, make sure you understand these",
            "line": 9
          },
          {
            "value": "# dependencies (which are documented below).",
            "line": 10
          },
          {
            "value": "#18852",
            "line": 12
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19787
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2672069
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1823824
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 82146863956
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 16,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 7266160245
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 17,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3180266653
            }
          },
          {
            "keyword": "Then ",
            "name": "I am notified I can not use Additional Software for \"popularity-contest\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 3362414928
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software documentation from the notification",
            "line": 19,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 9585670870
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 718842259
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1302002484
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2790530
            }
          }
        ]
      },
      {
        "id": "additional-software;i-set-up-additional-software-when-installing-a-package-without-persistent-partition-and-the-package-is-installed-next-time-i-start-tails",
        "keyword": "Scenario",
        "name": "I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
        "description": "",
        "line": 27,
        "type": "scenario",
        "comments": [
          {
            "value": "# Here we install the popularity-contest package to test if debconf does not prevent",
            "line": 21
          },
          {
            "value": "# Additional Software from automatically installing packages.",
            "line": 22
          },
          {
            "value": "# This scenario also sets up the \"__internal\" drive that the following",
            "line": 23
          },
          {
            "value": "# scenarios will reuse.",
            "line": 24
          },
          {
            "value": "# Note: the \"__internal\" drive will keep its state across scenarios",
            "line": 25
          },
          {
            "value": "# and features until one of its snapshots is restored.",
            "line": 26
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13015
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2517069
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1724059
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I start Tails from a freshly installed USB drive with an administration password and the network is plugged and I login",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:264"
            },
            "result": {
              "status": "passed",
              "duration": 45942631605
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 29,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 6921602805
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 30,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3181949745
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to add the \"popularity-contest\" package to my Additional Software",
            "line": 31,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 3067175413
            }
          },
          {
            "keyword": "When ",
            "name": "I create a persistent storage and activate the Additional Software feature",
            "line": 32,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 17250256516
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 545559153
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5279830435
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 36049675889
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 19694207642
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7995667819
            }
          },
          {
            "keyword": "And ",
            "name": "the Additional Software installation service has started",
            "line": 38,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 10344492396
            }
          },
          {
            "keyword": "Then ",
            "name": "I am notified that the installation succeeded",
            "line": 39,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1681239311
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 536706705
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"popularity-contest\" is installed after Additional Software has been installed",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:967"
            },
            "result": {
              "status": "passed",
              "duration": 123371211
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 723102104
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 907383966
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35993371
            }
          }
        ]
      },
      {
        "id": "additional-software;the-additional-software-dpkg-hook-notices-when-persistence-is-locked-down-while-installing-a-package",
        "keyword": "Scenario",
        "name": "The Additional Software dpkg hook notices when persistence is locked down while installing a package",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20459
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2757349
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2617377
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 80972028
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 65390227784
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 47,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 4400037920
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"ripgrep\" using apt",
            "line": 48,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3185050181
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software dpkg hook has been run for package \"ripgrep\" and notices the persistence is locked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:144"
            },
            "result": {
              "status": "passed",
              "duration": 4192024327
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"ripgrep\" is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:967"
            },
            "result": {
              "status": "passed",
              "duration": 54965353
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 661632713
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 696943660
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11412527
            }
          }
        ]
      },
      {
        "id": "additional-software;my-additional-software-list-is-configurable-through-a-gui-or-through-notifications-when-i-install-or-remove-packages-with-apt-or-synaptic",
        "keyword": "Scenario",
        "name": "My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
        "description": "",
        "line": 53,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 52
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18084
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1839254
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1731814
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78427147
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 98009532189
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"popularity-contest\" using apt",
            "line": 56,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3130521311
            }
          },
          {
            "keyword": "And ",
            "name": "I accept removing \"popularity-contest\" from Additional Software",
            "line": 57,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2479408337
            }
          },
          {
            "keyword": "Then ",
            "name": "\"popularity-contest\" is not in the list of Additional Software",
            "line": 58,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 505706760
            }
          },
          {
            "keyword": "When ",
            "name": "I start Synaptic",
            "line": 59,
            "match": {
              "location": "features/step_definitions/apt.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 11735207083
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using Synaptic",
            "line": 60,
            "match": {
              "location": "features/step_definitions/apt.rb:142"
            },
            "result": {
              "status": "passed",
              "duration": 21259644817
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"cowsay\" using Synaptic",
            "line": 61,
            "match": {
              "location": "features/step_definitions/apt.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 7944985288
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 62,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2544729654
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 652305683
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"cowsay\" using apt",
            "line": 64,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3164103414
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse removing \"cowsay\" from Additional Software",
            "line": 65,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2606641331
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 598577344
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 67,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9145055108
            }
          },
          {
            "keyword": "And ",
            "name": "I remove \"cowsay\" from the list of Additional Software using Additional Software GUI",
            "line": 68,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 3534849244
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 69,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 933835840
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"cowsay\" using apt",
            "line": 70,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3169321903
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse adding \"cowsay\" to Additional Software",
            "line": 71,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 1477007480
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 72,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 498734420
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 298485761
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 483804767
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 31996427
            }
          }
        ]
      },
      {
        "id": "additional-software;recovering-in-offline-mode-after-additional-software-previously-failed-to-upgrade-and-then-succeed-to-upgrade-when-online",
        "keyword": "Scenario",
        "name": "Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
        "description": "",
        "line": 77,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 76
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
            "line": 74
          },
          {
            "value": "# See https://tails.net/blueprint/additional_software_packages/offline_mode/#incomplete-online-upgrade for high level logic",
            "line": 75
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18505
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2730608
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3241313
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 83523836
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 78637552591
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 80,
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 6216656
            }
          },
          {
            "keyword": "When ",
            "name": "I install an old version \"3.03+dfsg2-1\" of the cowsay package using apt",
            "line": 81,
            "match": {
              "location": "features/step_definitions/apt.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 5560228596
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 82,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 5267857667
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 83,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 514112262
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 4145070525
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 34406154396
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 11626275669
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 89,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 87
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 88
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 8399131
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the tails-virt-notify-user.service user unit",
            "line": 92,
            "comments": [
              {
                "value": "# Prevent the \"Warning: virtual machine detected!\" notification from racing",
                "line": 90
              },
              {
                "value": "# with the one we'll be interacting with below.",
                "line": 91
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1714"
            },
            "result": {
              "status": "passed",
              "duration": 55788076
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7658872398
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 94,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10206467922
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 95,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 38881964
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare the Additional Software upgrade process to fail",
            "line": 98,
            "comments": [
              {
                "value": "# We remove the newest package after it has been downloaded and before",
                "line": 96
              },
              {
                "value": "# it is installed, so that the upgrade process fails",
                "line": 97
              }
            ],
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 46863667
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 45615445
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12081664734
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 46977640
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"The upgrade of your additional software failed\" notification after at most 300 seconds",
            "line": 102,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1319686895
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software configuration window from the notification",
            "line": 103,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:159"
            },
            "result": {
              "status": "passed",
              "duration": 2423820435
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 12746862434
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 33570454222
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 11707813428
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 109,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 107
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 108
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 5031955
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8956173615
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 111,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10149127922
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 112,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 50973948
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30597616
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 15333672821
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software upgrade service has started",
            "line": 115,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 43274724
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is newer than \"3.03+dfsg2-1\"",
            "line": 116,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 59205186
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 319017583
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 722027832
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25086776
            }
          }
        ]
      },
      {
        "id": "additional-software;i-am-notified-when-additional-software-fails-to-install-a-package",
        "keyword": "Scenario",
        "name": "I am notified when Additional Software fails to install a package",
        "description": "",
        "line": 120,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker_inherited",
            "line": 119
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
            "line": 118
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15628
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4082523
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3677587
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 121,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 99252795
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 122,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 35000931942
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 11622383263
            }
          },
          {
            "keyword": "And ",
            "name": "I remove the \"cowsay\" deb files from the APT cache",
            "line": 124,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 40169317
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7761959789
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"The installation of your additional software failed\" notification after at most 300 seconds",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 8594118017
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software log file from the notification",
            "line": 127,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 6176020210
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"cowsay\" is not installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:967"
            },
            "result": {
              "status": "passed",
              "duration": 424207155
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 307124680
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 792665486
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25456948
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_upgrade.feature",
    "id": "upgrading-an-old-tails-usb-installation",
    "keyword": "Feature",
    "name": "Upgrading an old Tails USB installation",
    "description": "  As a Tails user\n  If I have an old version of Tails installed on a USB device\n  and the USB device has a Persistent Storage\n  I want to upgrade Tails on it\n  and keep my Persistent Storage in the process",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "upgrading-an-old-tails-usb-installation;installing-an-old-version-of-tails-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing an old version of Tails to a pristine USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "comments": [
          {
            "value": "# An issue with this feature is that scenarios depend on each",
            "line": 9
          },
          {
            "value": "# other. When editing this feature, make sure you understand these",
            "line": 10
          },
          {
            "value": "# dependencies (which are documented below).",
            "line": 11
          },
          {
            "value": "# Installation method inspired by the usb-install-tails-greeter",
            "line": 13
          },
          {
            "value": "# checkpoint, variations are using the old Tails USB image and a",
            "line": 14
          },
          {
            "value": "# different device name (\"old\" instead of \"__internal\")",
            "line": 15
          },
          {
            "value": "#",
            "line": 16
          },
          {
            "value": "# Boot the system to make sure resizing has happened, and to check",
            "line": 17
          },
          {
            "value": "# the system is sane (safe access rights, no persistence, etc.); end",
            "line": 18
          },
          {
            "value": "# with unplugging to get both a clean state and a stopped machine.",
            "line": 19
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 22242
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3727069
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 150996896
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"old\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 30429984
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"old\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1026592653
            }
          },
          {
            "keyword": "And ",
            "name": "I write an old version of the Tails USB image to disk \"old\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 15043998677
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"old\" with network unplugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 44669124970
            }
          },
          {
            "keyword": "Then ",
            "name": "the boot device has safe access rights",
            "line": 26,
            "match": {
              "location": "features/step_definitions/usb.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 2486693148
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 219053715
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"old\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 43535834
            }
          },
          {
            "keyword": "And ",
            "name": "process \"udev-watchdog\" is running",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:861"
            },
            "result": {
              "status": "passed",
              "duration": 37194262
            }
          },
          {
            "keyword": "And ",
            "name": "udev-watchdog is monitoring the correct device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 194122557
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"old\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 131504557
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3491135140
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30668159
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;creating-a-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Creating a persistent partition with the old Tails USB installation",
        "description": "",
        "line": 34,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing an old version of Tails to a pristine USB drive",
            "line": 33
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 22853
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3076584
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 99563210
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 50780954439
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 232181492
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 23948077454
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1122"
            },
            "result": {
              "status": "passed",
              "duration": 7760077117
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition exists on USB drive \"old\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 517115887
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 4441493943
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 538591654
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6001436
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;writing-files-to-a-read/write-enabled-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Creating a persistent partition with the old Tails USB installation",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13786
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1973014
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 88210623
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login with persistence enabled",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 63738556816
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 216974471
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 48,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7114677318
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 49,
            "match": {
              "location": "features/step_definitions/usb.rb:1082"
            },
            "result": {
              "status": "passed",
              "duration": 1182876544
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 51,
            "comments": [
              {
                "value": "# Verify that our baseline for the next scenarios is sane",
                "line": 50
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:999"
            },
            "result": {
              "status": "passed",
              "duration": 173994813
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 52,
            "match": {
              "location": "features/step_definitions/usb.rb:1016"
            },
            "result": {
              "status": "passed",
              "duration": 356358280
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1867951805
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 54,
            "match": {
              "location": "features/step_definitions/usb.rb:1122"
            },
            "result": {
              "status": "passed",
              "duration": 6799828319
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2643642958
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"old\"",
            "line": 57,
            "comments": [
              {
                "value": "# XXX: how does guestfs work vs snapshots? (tails/tails#10330)",
                "line": 56
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 12024526585
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 123616969
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6428204
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-old-tails-usb-installation-from-another-tails-usb-drive",
        "keyword": "Scenario",
        "name": "Upgrading an old Tails USB installation from another Tails USB drive",
        "description": "",
        "line": 60,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
            "line": 59
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12092
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1883657
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8723838084
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 13615476538
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"old\" to a new USB drive \"to_upgrade\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 889083179
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"to_upgrade\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2260110124
            }
          },
          {
            "keyword": "When ",
            "name": "I upgrade Tails to USB drive \"to_upgrade\" by cloning",
            "line": 65,
            "match": {
              "location": "features/step_definitions/usb.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 91760092542
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"to_upgrade\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/usb.rb:608"
            },
            "result": {
              "status": "passed",
              "duration": 18299671897
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"to_upgrade\"",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 133877001
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"__internal\"",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 130315321
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1991783674
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20017
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;booting-tails-from-a-usb-drive-upgraded-from-usb-with-persistence-enabled",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive upgraded from USB with persistence enabled",
        "description": "",
        "line": 71,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Upgrading an old Tails USB installation from another Tails USB drive",
            "line": 70
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13756
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3858034
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 114493259
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"to_upgrade\" with network unplugged and I login with persistence enabled",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 64817912964
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features from the old Tails version are active",
            "line": 74,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 1197490216
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"to_upgrade\"",
            "line": 75,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 258679141
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:956"
            },
            "result": {
              "status": "passed",
              "duration": 2665317160
            }
          },
          {
            "keyword": "And ",
            "name": "the expected persistent files created with the old Tails version are present in the filesystem",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1128"
            },
            "result": {
              "status": "passed",
              "duration": 1381818124
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 2048897528
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 808086823
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7313604
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-initial-tails-installation-with-an-incremental-upgrade",
        "keyword": "Scenario",
        "name": "Upgrading an initial Tails installation with an incremental upgrade",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17102
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2636261
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8154397085
            }
          },
          {
            "keyword": "And ",
            "name": "no SquashFS delta is installed",
            "line": 83,
            "match": {
              "location": "features/step_definitions/usb.rb:1450"
            },
            "result": {
              "status": "passed",
              "duration": 75182274
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 219649133
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1487"
            },
            "result": {
              "status": "passed",
              "duration": 35223342
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are not present",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 223792368
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are not present",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 298662339
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 38973653
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 14509724784
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 90,
            "match": {
              "location": "features/step_definitions/usb.rb:1334"
            },
            "result": {
              "status": "passed",
              "duration": 327025724
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.2~testoverlayfs",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:1353"
            },
            "result": {
              "status": "passed",
              "duration": 4444508056
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5989397122
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 64575542450
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.2~testoverlayfs",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1518"
            },
            "result": {
              "status": "passed",
              "duration": 5033036
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 9217947461
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are present",
            "line": 96,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 191977801
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.2~testoverlayfs SquashFS delta is installed",
            "line": 97,
            "match": {
              "location": "features/step_definitions/usb.rb:1450"
            },
            "result": {
              "status": "passed",
              "duration": 41837914
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 99,
            "comments": [
              {
                "value": "# Our IUK sets a release date that can make Tor bootstrapping impossible",
                "line": 98
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1629"
            },
            "result": {
              "status": "passed",
              "duration": 102130102
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 103,
            "comments": [
              {
                "value": "# We'll really install Tails_amd64_6.0~testoverlayfs_to_6.3~testoverlayfs.iuk",
                "line": 100
              },
              {
                "value": "# but we need some way to force upgrading a second time in a row",
                "line": 101
              },
              {
                "value": "# even if only the initially installed version is considered",
                "line": 102
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 133201804
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32460514
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10340797067
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.3~testoverlayfs",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1334"
            },
            "result": {
              "status": "passed",
              "duration": 1004867729
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.3~testoverlayfs",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1353"
            },
            "result": {
              "status": "passed",
              "duration": 3450469009
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 4062653754
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 63398165683
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.3~testoverlayfs",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1518"
            },
            "result": {
              "status": "passed",
              "duration": 5775803
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 111,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 8331175701
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 429011646
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.3~testoverlayfs SquashFS delta is installed",
            "line": 113,
            "match": {
              "location": "features/step_definitions/usb.rb:1450"
            },
            "result": {
              "status": "passed",
              "duration": 58004176
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 116,
            "comments": [
              {
                "value": "# Regression test for #17425 (i.e. the Upgrader would propose",
                "line": 114
              },
              {
                "value": "# upgrading to the version that's already running)",
                "line": 115
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1629"
            },
            "result": {
              "status": "passed",
              "duration": 118582957
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 117,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 171528057
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 118,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26990743
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10616905021
            }
          },
          {
            "keyword": "Then ",
            "name": "the Upgrader considers the system as up-to-date",
            "line": 120,
            "match": {
              "location": "features/step_definitions/usb.rb:1420"
            },
            "result": {
              "status": "passed",
              "duration": 10449587354
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 122,
            "comments": [
              {
                "value": "# Regression test on #8158 (i.e. the IUK's filesystem is not part of the Unsafe Browser's chroot)",
                "line": 121
              }
            ],
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 3400482592
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present in the Unsafe Browser's chroot",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:1298"
            },
            "result": {
              "status": "passed",
              "duration": 373456884
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 953297342
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12169701
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-a-tails-whose-signing-key-is-outdated",
        "keyword": "Scenario",
        "name": "Upgrading a Tails whose signing key is outdated",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 125
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 114574
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3516475
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7937000368
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1495"
            },
            "result": {
              "status": "passed",
              "duration": 208388137
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1487"
            },
            "result": {
              "status": "passed",
              "duration": 32377540
            }
          },
          {
            "keyword": "And ",
            "name": "the signing key used by the Upgrader is outdated",
            "line": 130,
            "match": {
              "location": "features/step_definitions/usb.rb:1433"
            },
            "result": {
              "status": "passed",
              "duration": 43658081
            }
          },
          {
            "keyword": "But ",
            "name": "a current signing key is available on our website",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 23144
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 132,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 50363389
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 133,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9516133453
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1334"
            },
            "result": {
              "status": "passed",
              "duration": 1648118241
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 723822595
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19968
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/emergency_shutdown.feature",
    "id": "emergency-shutdown",
    "keyword": "Feature",
    "name": "Emergency shutdown",
    "description": "  As a Tails user\n  when I unplug my Tails device to trigger emergency shutdown\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "emergency-shutdown;tails-shuts-down-on-dvd-boot-medium-removal",
        "keyword": "Scenario",
        "name": "Tails shuts down on DVD boot medium removal",
        "description": "",
        "line": 11,
        "type": "scenario",
        "comments": [
          {
            "value": "# Test something close to real-world usage, without interfering,",
            "line": 7
          },
          {
            "value": "# i.e. without the \"I prepare Tails for memory erasure tests\" step;",
            "line": 8
          },
          {
            "value": "# and test that Tails eventually shuts down, which we don't do in",
            "line": 9
          },
          {
            "value": "# the following scenarios for test suite performance reasons.",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18865
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2833900
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 34145363941
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 175655150
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 9060364342
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 594520735
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19808
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-overlayfs-read-write-branch",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: overlayfs read-write branch",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 23494
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4654781
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6416575178
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 18,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 421421126
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 13177565781
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 20,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 3151090161
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 232067291
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 8654286321
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 23,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1476 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 703032297
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3794628261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19666
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-vfat",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: vfat",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10139
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2411182
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6755760387
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 27,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 322028330
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1581"
            },
            "result": {
              "status": "passed",
              "duration": 5273852891
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 29,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2629251371
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 41696980
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 90% of the test FS size in the guest's memory",
            "line": 31,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 3065992475
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 250895040
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 9126123736
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 34,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 751733494
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3884912005
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 385418
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: LUKS-encrypted ext4",
        "description": "",
        "line": 36,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10399
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2952814
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 37,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6492882906
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 38,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 307701541
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1581"
            },
            "result": {
              "status": "passed",
              "duration": 34791850328
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 40,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 891885624
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 41,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 36439043
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 42,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2825421919
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 203598768
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 44,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 8984518411
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 45,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1471 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 817499180
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3719649362
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 444510
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-and-shuts-down-on-usb-boot-medium-removal:-persistent-data",
        "keyword": "Scenario",
        "name": "Tails erases memory and shuts down on USB boot medium removal: persistent data",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 22281
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4368027
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8337756249
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 49,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 368717688
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 11545651380
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 100 MiB in the guest's memory",
            "line": 51,
            "output": [
              "Pattern coverage: 128.000% (128 MiB out of 100 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 3092545980
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1473"
            },
            "result": {
              "status": "passed",
              "duration": 335852310
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 53,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 4806649286
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 54,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1481 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 898454309
            }
          },
          {
            "keyword": "And ",
            "name": "Tails eventually shuts down",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 91053734050
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 404252212
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37960
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/apt.feature",
    "id": "apt-sources-are-correctly-configured",
    "keyword": "Feature",
    "name": "APT sources are correctly configured",
    "description": "  As a Tails user\n  I want APT to be configured to use hidden services",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "apt-sources-are-correctly-configured;apt-sources-are-configured-correctly",
        "keyword": "Scenario",
        "name": "APT sources are configured correctly",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15920
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2848348
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 80448834
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 32357635607
            }
          },
          {
            "keyword": "Then ",
            "name": "the only hosts in APT sources are \"cloudfront.debian.net,deb.tails.net,deb.torproject.org\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 38895636
            }
          },
          {
            "keyword": "And ",
            "name": "no proposed-updates APT suite is enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/apt.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 80481675
            }
          },
          {
            "keyword": "And ",
            "name": "no experimental APT suite is enabled for deb.torproject.org",
            "line": 11,
            "match": {
              "location": "features/step_definitions/apt.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 46070893
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, no unversioned Tails APT source is enabled",
            "line": 12,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 103382419
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, the tagged Tails APT source is enabled",
            "line": 13,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 17908955
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 953610392
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8087519
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/backup.feature",
    "id": "backing-up-the-persistent-storage",
    "keyword": "Feature",
    "name": "Backing up the persistent storage",
    "description": "  As a Tails user\n  I want to backup my persistent storage\n  And easily keep that backup updated",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "backing-up-the-persistent-storage;using-tails'-custom-backup-tool-to-backup-a-newly-added-file",
        "keyword": "Scenario",
        "name": "Using Tails' custom backup tool to backup a newly added file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19827
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3527755
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 22082642520
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 10,
            "comments": [
              {
                "value": "# The volume cannot be in use when GuestFs clones it, which we do below",
                "line": 9
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5532654480
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"backup\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/usb.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 812225251
            }
          },
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8520423996
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/live/persistence/TailsData_unlocked/new\" with contents \"foo\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1777"
            },
            "result": {
              "status": "passed",
              "duration": 13358911
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails' custom backup tool",
            "line": 14,
            "match": {
              "location": "features/step_definitions/backup.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 3282184777
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Plug in your backup Tails USB stick\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 180471919
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"backup\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 2374472491
            }
          },
          {
            "keyword": "And ",
            "name": "I give the Persistent Storage on drive \"backup\" its own UUID",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 643040015
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Retry\" in the backup tool",
            "line": 18,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3149467545
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Do you want to back up your Persistent Storage now?\"",
            "line": 19,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 160343859
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Back Up\" in the backup tool",
            "line": 20,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3119086434
            }
          },
          {
            "keyword": "And ",
            "name": "I enter my persistent storage passphrase into the polkit prompt",
            "line": 21,
            "match": {
              "location": "features/step_definitions/backup.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 2915736383
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Your Persistent Storage was backed up successfully to your backup Tails USB stick!\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 12216809877
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"backup\"",
            "line": 24,
            "comments": [
              {
                "value": "# The backup tool ejects the drive, so we have to replug it",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 121891229
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"backup\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1670736097
            }
          },
          {
            "keyword": "Then ",
            "name": "the USB drive \"backup\" contains the same files as my persistent storage",
            "line": 26,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 2797302229
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1045123950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 110938932
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/build.feature",
    "id": "custom-apt-sources-to-build-branches",
    "keyword": "Feature",
    "name": "custom APT sources to build branches",
    "description": "  As a Tails developer, when I build Tails, I'd be happy if\n  the proper APT sources were automatically picked depending\n  on which Git branch I am working on.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13465
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 123370
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 8,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 37316409
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 9,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 82080132
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 10,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 44382
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 11,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 99736
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 12,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 35711763
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 13,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 3430304
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 809231
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7133
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8736
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 92332
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 16,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 26802090
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 17,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 58865251
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 18,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 44794
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 19,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 70772
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 20,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 22573
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 21,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33537104
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 22,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 227946
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 23,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 79309
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 24,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 64983
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '1.0' suite",
            "line": 25,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 92533
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 976454
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6472
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10358
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 85961
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 28,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28027868
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 29,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 12197854
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 30,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 83829228
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 31,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 47770
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 32,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 91640
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 416554740
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7996688
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 35,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 37640
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 36,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6392885
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 37,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 24616
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50597044
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 39,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 165278
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1370860
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7213
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9827
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 83887
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 42,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 26185888
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 43,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 12762959
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 44,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 85061498
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 45,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 52408
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 46,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 90018
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 414955336
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58830887
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 49,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 254526
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53593408
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 51,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 246601
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54120141
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 53,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 134742
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 992092
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5361
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9829
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 103865
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 56,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 55498937
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 57,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 34921599
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 58,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 3658940
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 59,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3198973
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 60,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 43631
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 61,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 60948450
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.10' suite",
            "line": 62,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 185276
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1020956
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8225
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12273
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 91902
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 65,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 47596893
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 66,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 22886919
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 67,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 3517948
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 68,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2922206
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 69,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 70642
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 70,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 31386598
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 71,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 43651
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1015897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8125
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9939
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 80991
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 74,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28602490
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 75,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13763225
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 76,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 23217438
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 77,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 113272
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 78,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 8795010
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 79,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 459520997
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6729013
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 81,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 50243
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6313487
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 83,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 39323
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51643187
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 85,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 190455
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 989438
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6743
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 87,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 91691
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 88,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28120199
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 89,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9887700
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 90,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 20107560
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 91,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 104746
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 92,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3544508
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 392170938
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51493077
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 95,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 173162
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 96,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 68904565
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 97,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 403594
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 85318298
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 99,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 161763
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1050482
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8456
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-without-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch without overlays for a stable release",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9378
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 139610
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 102,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 100263570
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 103,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 57731914
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 104,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 43249
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 105,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 6058180
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 106,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 106038
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 107,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32358113
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 108,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 286734
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1399944
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8396
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with overlays for a stable release",
        "description": "",
        "line": 110,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9859
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 145370
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 111,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 33429743
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 112,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 56292317
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 113,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 46637
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 114,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5496022
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-disable-gdomap'",
            "line": 115,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 83025
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 116,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 73107
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 117,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28780181
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 118,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 175950
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-disable-gdomap' suite",
            "line": 119,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 82615
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 120,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 77985
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.10' suite",
            "line": 121,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 80330
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 996231
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4880
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a stable release",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8997
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 84510
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 124,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 32114398
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 125,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 53609127
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 126,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 42089
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 127,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 5417634
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 128,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 62818
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 129,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 392620947
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 130,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6352039
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 131,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 27161
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 132,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5570590
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 133,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 13885
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 134,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48236998
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 135,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 144078
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1015126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7083
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a stable release",
        "description": "",
        "line": 137,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 103094
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 138,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 45934508
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 139,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 60445121
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 140,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 47709
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 141,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 6636541
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 142,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 77215
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 143,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 391725494
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 144,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47471870
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 145,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 144019
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 146,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51469824
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 147,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 130524
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 148,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50340655
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 149,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 210924
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 3097251
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8325
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 151,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11903
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 84277
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 152,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 29091453
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 153,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 55208032
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 154,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 46686
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 155,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 40956
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 156,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31813134
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 157,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 185987
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the '0.11' suite",
            "line": 158,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 151623
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'feature-foo' suite",
            "line": 159,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 76674
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'bugfix-bar' suite",
            "line": 160,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 118963
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 5796352
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12934
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 162,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9698
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 78336
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 163,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 27729461
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 164,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 66063490
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 165,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 93244
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 166,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 217046
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 167,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 70482
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 168,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45222029
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 169,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 175418
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 170,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 100408
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 171,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 71012
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.11' suite",
            "line": 172,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 83796
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 885934
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6060
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 174,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9037
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 80380
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 175,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 29599491
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 176,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15215176
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 177,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 81693601
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 178,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 41377
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 179,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 112560
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 180,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 396058645
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8334119
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 182,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 36108
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 183,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6358462
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 184,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 18114
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 185,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28759353
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 186,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 136745
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1026626
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7623
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 188,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10319
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 79027
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 189,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28386918
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 190,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16212068
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 191,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 77876454
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 192,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 45815
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 193,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 77666
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 194,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 392767711
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 195,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 26582088
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 196,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 136614
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 197,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27716958
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 198,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 130734
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 199,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27084517
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 200,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 172191
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1044991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7053
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 202,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9529
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 83155
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 203,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 26510745
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 204,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 79152035
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 205,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16768136
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 48762
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 207,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2158591
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 208,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49586468
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.11' suite",
            "line": 209,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 225992
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1017951
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6512
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 211,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9887
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 80532
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 212,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 42484979
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 213,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 76895613
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 214,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 17040445
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 215,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 73988
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 216,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1947937
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 217,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 28918289
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 218,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 31979
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 981312
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7033
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 220,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9648
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 70912
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 221,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28884487
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 222,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 73368398
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 223,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 24105705
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 224,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 76013
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 225,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 1989744
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 226,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 469139347
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 227,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24711336
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 228,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 99085
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 229,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 14318313
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 230,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 91391
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 231,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 60985598
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 232,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 161382
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 983836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4959
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 234,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9989
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 70872
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 235,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 49425366
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 236,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 56371275
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 237,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 46570897
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 238,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 77675
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 239,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2132182
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 240,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 394036289
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 241,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 117248430
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 242,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 161311
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 243,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49470360
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 244,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 155549
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 245,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49002017
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 246,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 301834
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 4894848
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7794
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch",
        "description": "",
        "line": 248,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9317
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 121727
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 249,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 35764482
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 250,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15935652
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 251,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 54758273
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 252,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 3976093
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 253,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 155941
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 254,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3228387
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 255,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47775375
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.12-rc1' suite",
            "line": 256,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 176840
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 2118816
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7615
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 258,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9969
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 76143
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 259,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 47369788
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 260,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 33486288
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 261,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 83635075
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 262,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 3806216
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 263,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 219991
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 264,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2805317
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 265,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 29382996
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 266,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 45837
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1300999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7072
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a major release",
        "description": "",
        "line": 268,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 90519
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 269,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 27668166
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 270,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16783114
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 271,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 102236866
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 272,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 47849
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 273,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 7550826
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 274,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 73327
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 275,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 399881844
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 276,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6854296
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 277,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 30748
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 278,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7546070
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 279,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 14707
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 280,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29305502
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 281,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 143689
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1531298
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6703
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a major release",
        "description": "",
        "line": 283,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13105
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 111188
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 284,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 41333067
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 285,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 24558650
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 286,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 97437694
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 287,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 46297
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 288,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 8515738
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 289,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 307945
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 290,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 404021040
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 291,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29525053
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 292,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 127448
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 293,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29030449
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 294,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 140623
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 295,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28732072
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 296,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 129973
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1173661
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4799
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch without overlays",
        "description": "",
        "line": 298,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12083
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 128200
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 299,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 29320251
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 300,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 332371
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 301,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 61382831
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 302,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 375180
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1573397
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 29375
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch with overlays",
        "description": "",
        "line": 304,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11110
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 90699
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 305,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 53964931
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 306,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 80811
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 307,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 131725
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 308,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34126854
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 309,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 129212
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 310,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 62717
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 311,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 55714
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 4907101
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6953
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from the devel branch with no encoded time-based snapshot",
        "description": "",
        "line": 313,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8877
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 87805
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 314,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 60742636
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 315,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 57788
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 316,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 397662330
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 317,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10799093
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 318,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 144451
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 319,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8268357
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 320,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 111568
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 321,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7963608
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 322,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 213349
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 982865
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7094
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from the devel branch with encoded time-based snapshots",
        "description": "",
        "line": 324,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8968
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 89457
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 325,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 38252567
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 326,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 71985
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 327,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 395772109
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 328,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10582076
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 329,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 39874
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 330,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9375165
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 331,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22021
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 332,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13564475
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 333,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 501396
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 1836709
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 28333
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch without overlays",
        "description": "",
        "line": 335,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12313
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 218208
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 336,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 50263510
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 337,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 51547
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 338,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33215512
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 339,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 184214
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 891324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6974
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch with overlays",
        "description": "",
        "line": 341,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15560
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 111728
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 342,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28818064
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 343,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 98083
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 344,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 55694731
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 345,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 260746
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 346,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 79410
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 997903
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5530
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on devel",
        "description": "",
        "line": 348,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15288
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 72535
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 349,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 28690565
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-thunderbird'",
            "line": 350,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 130033
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 351,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 42409
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 352,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31518134
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 353,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 153477
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-thunderbird' suite",
            "line": 354,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 115024
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 355,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 59381
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 858773
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6732
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on devel",
        "description": "",
        "line": 357,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10489
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 76634
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 358,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 32801160
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 359,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 40826
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 360,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 42112252
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 361,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 188301
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 907294
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8596
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with no encoded time-based snapshot",
        "description": "",
        "line": 363,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12854
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 79497
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 364,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 50131855
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 365,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 113602
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 366,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 398649993
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 367,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9482525
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 368,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 125995
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 369,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9396984
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 370,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 84708
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 371,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23800176
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 372,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 324837
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 5484660
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 15879
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with encoded time-based snapshots",
        "description": "",
        "line": 374,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10880
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 79979
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 375,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 29365926
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 376,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 87664
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 377,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 395248594
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 378,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8727755
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 379,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 31771
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 380,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7546348
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 381,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 20128
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 382,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7853363
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 383,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 140944
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 893519
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5300
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on feature/jessie",
        "description": "",
        "line": 385,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 89096
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/7756-reintroduce-whisperback branch based on feature/jessie",
            "line": 386,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 32025291
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 387,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 85399
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 388,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 43872
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 389,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29692174
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 390,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 161891
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 391,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 63039
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 392,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 55984
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 792179
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5180
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on feature/jessie",
        "description": "",
        "line": 394,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8886
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 226081
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on feature/jessie",
            "line": 395,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 45736660
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 396,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 274013
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 397,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37894929
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 398,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 178804
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 946437
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5499
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-dots-in-its-name",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with dots in its name",
        "description": "",
        "line": 400,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9829
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 179836
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/live-boot-3.x branch based on devel",
            "line": 401,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 27183631
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-live-boot-3.x'",
            "line": 402,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 308606
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 403,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29790779
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 404,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 233977
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-live-boot-3.x' suite",
            "line": 405,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 81213
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 925828
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5009
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/apt_overlays.d-directory",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/APT_overlays.d directory",
        "description": "",
        "line": 407,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10500
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 83906
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 408,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 59388776
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory does not exist",
            "line": 409,
            "match": {
              "location": "features/step_definitions/build.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 194523
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 410,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12563456
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 411,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 39594
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 736115
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4599
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/base_branch-file",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/base_branch file",
        "description": "",
        "line": 413,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10770
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 75901
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 414,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 36460522
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file does not exist",
            "line": 415,
            "match": {
              "location": "features/step_definitions/build.rb:139"
            },
            "result": {
              "status": "passed",
              "duration": 715045
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 416,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4292704
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 417,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 19266
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 960072
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4438
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-where-config/base_branch-is-empty",
        "keyword": "Scenario",
        "name": "build from a branch where config/base_branch is empty",
        "description": "",
        "line": 419,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9568
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 66716
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 420,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 35370787
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file is empty",
            "line": 421,
            "match": {
              "location": "features/step_definitions/build.rb:147"
            },
            "result": {
              "status": "passed",
              "duration": 1219606
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 422,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5145818
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 423,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 20858
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 712701
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4718
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/celluloid.feature",
    "id": "using-celluloid",
    "keyword": "Feature",
    "name": "Using Celluloid",
    "description": "  As a Tails user\n  I want to watch local videos in Celluloid\n  And Flatpak portals should make it possible to open files in any location despite Flatpak's confinement",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10188
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3089929
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 129352449
            }
          }
        ]
      },
      {
        "id": "using-celluloid;watching-a-mp4-video-stored-on-the-non-persistent-filesystem",
        "keyword": "Scenario",
        "name": "Watching a MP4 video stored on the non-persistent filesystem",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7184067878
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 12,
            "match": {
              "location": "features/step_definitions/celluloid.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7884298320
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia\" as user \"amnesia\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/celluloid.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 49335900
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/video.mp4\" exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 46545791
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7874598747
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"/home/amnesia/video.mp4\" in Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1993"
            },
            "result": {
              "status": "passed",
              "duration": 6030601641
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 17,
            "match": {
              "location": "features/step_definitions/celluloid.rb:43"
            },
            "result": {
              "status": "passed",
              "duration": 4444534254
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1436606123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 845689
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10700
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3215964
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/celluloid.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 198736869
            }
          }
        ]
      },
      {
        "id": "using-celluloid;watching-mp4-videos-stored-in-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Watching MP4 videos stored in the Persistent Storage",
        "description": "",
        "line": 24,
        "type": "scenario",
        "comments": [
          {
            "value": "# The next scenario is similar to the previous one, except it opens the file in another way.",
            "line": 19
          },
          {
            "value": "# Since we're dealing with desktop portals, it's not entirely obvious that",
            "line": 20
          },
          {
            "value": "# clicking on \"Open\" from within Celluloid follows the same code path as",
            "line": 21
          },
          {
            "value": "# double-clicking on a file in Files. Now we have two tests follow those",
            "line": 22
          },
          {
            "value": "# two paths.",
            "line": 23
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8329172290
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 26,
            "match": {
              "location": "features/step_definitions/celluloid.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 8375406818
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/celluloid.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 38746439
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Celluloid\" via GNOME Activities Overview",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7936343954
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"/home/amnesia/Persistent/video.mp4\" in Celluloid",
            "line": 29,
            "match": {
              "location": "features/step_definitions/celluloid.rb:30"
            },
            "result": {
              "status": "failed",
              "error_message": "The Dogtail init script raised: SearchError: child of [desktop frame | main]: 'org.gnome.Nautilus' application\nSTDOUT:\n\nSTDERR:\n\n (Dogtail::Failure)\n./features/support/helpers/dogtail.rb:93:in `run'\n./features/support/helpers/dogtail.rb:70:in `initialize'\n./features/step_definitions/common_steps.rb:1972:in `new'\n./features/step_definitions/common_steps.rb:1972:in `nautilus_open_file'\n./features/step_definitions/celluloid.rb:36:in `/^I open \"(.*[.].*)\" in Celluloid$/'\nfeatures/celluloid.feature:29:in `And I open \"/home/amnesia/Persistent/video.mp4\" in Celluloid'",
              "duration": 12929084764
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the 30s-long video loaded after at most 10 seconds",
            "line": 30,
            "match": {
              "location": "features/step_definitions/celluloid.rb:43"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'Watching MP4 videos stored in the Persistent Storage' (at time 01:24:50)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6618/artifact/build-artifacts/01:24:50_Watching_MP4_videos_stored_in_the_Persistent_Storage.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6618/artifact/build-artifacts/01:24:50_Watching_MP4_videos_stored_in_the_Persistent_Storage.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6618/artifact/build-artifacts/01:24:50_Watching_MP4_videos_stored_in_the_Persistent_Storage.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6618/artifact/build-artifacts/01:24:50_Watching_MP4_videos_stored_in_the_Persistent_Storage.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 5293486799
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11262637
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/dhcp.feature",
    "id": "getting-a-dhcp-lease-without-leaking-too-much-information",
    "keyword": "Feature",
    "name": "Getting a DHCP lease without leaking too much information",
    "description": "  As a Tails user\n  when I connect to a network with a DHCP server\n  I should be able to connect to the Internet\n  and the hostname should not have been leaked on the network.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3242695
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6990691704
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5067441
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 51657141
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9832786542
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7844945607
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 33196707
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-the-default-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with the default NetworkManager connection",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 17,
            "match": {
              "location": "features/step_definitions/dhcp.rb:6"
            },
            "result": {
              "status": "passed",
              "duration": 108962968
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 820957411
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44340862
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2768748
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6423804477
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3255007
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31667852
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9569111346
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7381421208
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 130793271
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-a-manually-configured-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with a manually configured NetworkManager connection",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I add a wired DHCP NetworkManager connection called \"manually-added-con\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:985"
            },
            "result": {
              "status": "passed",
              "duration": 104501357
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"manually-added-con\" NetworkManager connection",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1000"
            },
            "result": {
              "status": "passed",
              "duration": 351357047
            }
          },
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 22,
            "match": {
              "location": "features/step_definitions/dhcp.rb:6"
            },
            "result": {
              "status": "passed",
              "duration": 102562015
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 551617499
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44058453
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/documentation.feature",
    "id": "tails-documentation",
    "keyword": "Feature",
    "name": "Tails documentation",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@doc",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-offline",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when offline",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18013
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3019157
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6844836423
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9245467416
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 7,
            "match": {
              "location": "features/step_definitions/browser.rb:511"
            },
            "result": {
              "status": "passed",
              "duration": 12797558392
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 8,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 587654847
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1194572636
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19436
            }
          }
        ]
      },
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-online",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when online",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 25007
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2571861
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9595020361
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9446767078
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:511"
            },
            "result": {
              "status": "passed",
              "duration": 11079240776
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 14,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 404792994
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 757032256
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22313
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/electrum.feature",
    "id": "electrum-bitcoin-client",
    "keyword": "Feature",
    "name": "Electrum Bitcoin client",
    "description": "  As a Tails user\n  I might want to use a Bitcoin client\n  And all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "electrum-bitcoin-client;i-am-warned-if-electrum-is-not-persistent",
        "keyword": "Scenario",
        "name": "I am warned if Electrum is not persistent",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11462
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2973631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2095483
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6579393457
            }
          },
          {
            "keyword": "When ",
            "name": "I start Electrum through the GNOME menu",
            "line": 9,
            "match": {
              "location": "features/step_definitions/electrum.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 9950960393
            }
          },
          {
            "keyword": "But ",
            "name": "the \"electrum\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:829"
            },
            "result": {
              "status": "passed",
              "duration": 267583016
            }
          },
          {
            "keyword": "And ",
            "name": "I see a warning that Electrum is not persistent",
            "line": 11,
            "match": {
              "location": "features/step_definitions/electrum.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 770109232
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 236773038
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 883670967
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 84157
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/evince.feature",
    "id": "using-evince",
    "keyword": "Feature",
    "name": "Using Evince",
    "description": "  As a Tails user\n  I want to view and print PDF files in Evince",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-/usr/share",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in /usr/share",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17242
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2857725
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6560341148
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/usr/share/cups/data/default-testpage.pdf\" with Evince",
            "line": 8,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4344397569
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 1112240870
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4646929719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 540396466
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21661
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-non-persistent-/home/amnesia",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in non-persistent /home/amnesia",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11322
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3166180
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6455260124
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia\" as user \"amnesia\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 70461654
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/default-testpage.pdf\" with Evince",
            "line": 15,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4910882868
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 984889561
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4118560177
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 666221175
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26059
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-persistent-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in persistent /home/amnesia/Persistent",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11561
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2649858
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8146005596
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 88364828
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/Persistent/default-testpage.pdf\" exists",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 44133672
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/default-testpage.pdf\" with Evince",
            "line": 23,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4553188536
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 1049272407
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/Persistent/output.pdf\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4440090917
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 891963899
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22712
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/gnome.feature",
    "id": "gnome-is-well-integrated-into-tails",
    "keyword": "Feature",
    "name": "GNOME is well-integrated into Tails",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "gnome-is-well-integrated-into-tails;a-screenshot-is-taken-when-the-printscreen-key-is-pressed",
        "keyword": "Scenario",
        "name": "A screenshot is taken when the PRINTSCREEN key is pressed",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12373
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2869847
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6715367004
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 7,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 10000144645
            }
          },
          {
            "keyword": "And ",
            "name": "there is no screenshot in the live user's Pictures directory",
            "line": 8,
            "match": {
              "location": "features/step_definitions/gnome.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 38163626
            }
          },
          {
            "keyword": "When ",
            "name": "I press the \"PRINTSCREEN\" key",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1315"
            },
            "result": {
              "status": "passed",
              "duration": 121436082
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME offers me various screenshot options",
            "line": 10,
            "match": {
              "location": "features/step_definitions/gnome.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 926660698
            }
          },
          {
            "keyword": "And ",
            "name": "I press the \"Return\" key",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1315"
            },
            "result": {
              "status": "passed",
              "duration": 120777051
            }
          },
          {
            "keyword": "Then ",
            "name": "a screenshot is saved to the live user's Pictures directory",
            "line": 12,
            "match": {
              "location": "features/step_definitions/gnome.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 36464865
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 743243816
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20157
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;gnome-notifications-are-shown-to-the-user",
        "keyword": "Scenario",
        "name": "GNOME notifications are shown to the user",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10640
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3022673
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6725173076
            }
          },
          {
            "keyword": "When ",
            "name": "the \"Dogtail rules!\" notification is sent",
            "line": 16,
            "match": {
              "location": "features/step_definitions/gnome.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 183849209
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"Dogtail rules!\" notification is shown to the user",
            "line": 17,
            "match": {
              "location": "features/step_definitions/gnome.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 242365540
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 553081781
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24415
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;i-can-launch-various-apps-via-gnome-activities-overview",
        "keyword": "Scenario",
        "name": "I can launch various apps via GNOME Activities Overview",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10740
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2473057
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 22,
            "comments": [
              {
                "value": "# Some apps (Electrum and Persistent Storage Backup) only start when",
                "line": 20
              },
              {
                "value": "# a Persistent Storage is available.",
                "line": 21
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7933596373
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 24,
            "comments": [
              {
                "value": "# Some apps (Tor Browser) only start when the network is plugged.",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 31120556
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10683450662
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 6716846562
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9404008975
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tails-additional-software-config\" window",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1378429224
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Disks\" via GNOME Activities Overview",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7377756242
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"gnome-disks\" window via Alt+F4",
            "line": 31,
            "comments": [
              {
                "value": "# The close button of GNOME Disks is not accessible",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1285"
            },
            "result": {
              "status": "passed",
              "duration": 394435970
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Console\" via GNOME Activities Overview",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8433755264
            }
          },
          {
            "keyword": "And ",
            "name": "I close Console",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1297"
            },
            "result": {
              "status": "passed",
              "duration": 2802794282
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7393091415
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"org.gnome.Nautilus\" window",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 13951225835
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Persistent Storage\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9695060945
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tps-frontend\" window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1742298449
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Back Up Persistent Storage\" via GNOME Activities Overview",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 10302286663
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1874805635
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin\" via GNOME Activities Overview",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7648106537
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Pidgin\" window via Alt+F4",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1285"
            },
            "result": {
              "status": "passed",
              "duration": 2016629723
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Thunderbird\" via GNOME Activities Overview",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8276078697
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Learn More\" in the \"Install Thunderbird\" zenity dialog",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1951"
            },
            "result": {
              "status": "passed",
              "duration": 3679521679
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 7422364694
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tor Browser\" via GNOME Activities Overview",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8241099088
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 2402914782
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unlock VeraCrypt Volumes\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9778732638
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"unlock-veracrypt-volumes\" window",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1785077645
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unsafe Browser\" via GNOME Activities Overview",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8572573408
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 3842492311
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8112756745
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"secrets\" window",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 2820197928
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 795595381
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22362
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_failure.feature",
    "id": "hardware-failures",
    "keyword": "Feature",
    "name": "Hardware failures",
    "description": "  In order to update my failing hardware before I lose data\n  As a Tails user\n  I want to be warned about hardware failures",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15077
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3377145
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 70552568
            }
          },
          {
            "keyword": "And ",
            "name": "SquashFS is damaged in a way that some read operations fail",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 25387
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 621595734
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 23093407882
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 2616929258
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 762299885
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 46598136
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17733
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3133900
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 98065544
            }
          },
          {
            "keyword": "And ",
            "name": "boot device is damaged in a way that some read operations fail",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 36188
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 716986646
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 22755488853
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1112867335
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1003083825
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6767365
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11031
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2963121
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 92901202
            }
          },
          {
            "keyword": "And ",
            "name": "boot device with a target error is damaged in a way that some read operations fail",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 38822
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 668903759
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 22061394906
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 2390269650
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 949602071
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7673035
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17262
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2955096
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 107625788
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 29,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8157315168
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the SquashFS",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 201575655
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 1523142454
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 18328166156
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1186298473
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23935
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 28945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 7578939
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 143593158
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8488485217
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1390761770
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 641305666
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 18192732655
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1420357882
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 45846
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 32751
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 11762769
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 105398336
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7760421474
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device with a target error",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1348809589
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 632010906
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 17822377356
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 816343912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22993
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 7944
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3252852
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9322914343
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup header",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 233694398
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 289303273
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 679306531
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 39238159750
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8867401457
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7952980680
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 232018374
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 6451646
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1097557985
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6957748
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20138
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3800995
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7994406528
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup partition table",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 234421241
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:276"
            },
            "result": {
              "status": "passed",
              "duration": 240405322
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 667656084
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 34207599209
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8426936134
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7512248771
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 117165904
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 6181560
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 830697237
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 15575820
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-without-a-persistent-partition",
        "keyword": "Scenario",
        "name": "GPT backup corruption without a persistent partition",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16682
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2216518
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 103670969
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_gpt_corruption=gpt_backup,gpt_backup_table\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 32110
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 19963852
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1038883282
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 14324720708
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 61974130139
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 581501441
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids creating a persistent partition",
            "line": 56,
            "match": {
              "location": "features/step_definitions/hardware.rb:97"
            },
            "result": {
              "status": "passed",
              "duration": 42524294
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7517281759
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7259337878
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to reinstall Tails due to partitioning errors",
            "line": 59,
            "match": {
              "location": "features/step_definitions/hardware.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 111084435
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 62,
            "comments": [
              {
                "value": "# We are gonna verify the dialog again so we need to clean up the",
                "line": 60
              },
              {
                "value": "# first instance.",
                "line": 61
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1182470633
            }
          },
          {
            "keyword": "And ",
            "name": "I am told that Persistent Storage cannot be created",
            "line": 63,
            "match": {
              "location": "features/step_definitions/hardware.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 1227949430
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 64,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 6106922
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1028436337
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 166199059
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19136
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2546175
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 86906647
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=guid\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 94576
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 34748948
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1022626185
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 13385403787
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 44074105147
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 295266562
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 35114159
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 41169513
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 205391803
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error guid-not-randomized",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 13592527
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 462172912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 153823153
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15478
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2592039
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 87740514
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=part_resize\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 52008
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 23333434
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1022147101
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 13319418158
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 40687891286
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 214903913
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 66981897
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 31417426
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 172654382
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error system-partition-not-resized",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5645982
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 534003973
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 122887886
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;4",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15730
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2574676
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 85577184
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=fs_resize\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:197"
            },
            "result": {
              "status": "passed",
              "duration": 29866
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 21014535
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1021021932
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 13204838383
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 40309403743
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 221735415
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 53029925
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 30572238
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 219599086
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error fs-not-resized",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8836878
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 564781162
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 133789832
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_support.feature",
    "id": "hardware-support",
    "keyword": "Feature",
    "name": "Hardware support",
    "description": "  In order to understand why Tails does not work\n  As someone using a computer that is not supported by Tails\n  I want to be informed that my hardware is not supported",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-support;alerting-about-unsupported-graphics-card-before-reaching-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Alerting about unsupported graphics card before reaching the Welcome Screen",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 37160
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3836883
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 109907646
            }
          },
          {
            "keyword": "And ",
            "name": "the computer has an unsupported graphics card",
            "line": 10,
            "match": {
              "location": "features/step_definitions/hardware.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 27601
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 758502414
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 24661222444
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a graphics card failure message on the splash screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/hardware.rb:52"
            },
            "result": {
              "status": "passed",
              "duration": 12190325284
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1088549815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 38855462
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/keys.feature",
    "id": "tails-related-cryptographic-keys-are-up-to-date",
    "keyword": "Feature",
    "name": "Tails-related cryptographic keys are up-to-date",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-openpgp-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included OpenPGP keys are up-to-date",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16551
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2661047
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7255270065
            }
          },
          {
            "keyword": "Then ",
            "name": "the included OpenPGP keys are valid for the next 1 month",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 1409925416
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 483309737
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22292
            }
          }
        ]
      },
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-apt-repository-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included APT repository keys are up-to-date",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8356
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2513393
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6589939913
            }
          },
          {
            "keyword": "Then ",
            "name": "the keys trusted by APT are valid for the next 3 months",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 935015841
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 605287389
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19928
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/localization.feature",
    "id": "localization",
    "keyword": "Feature",
    "name": "Localization",
    "description": "  As a Tails user\n  I want Tails to be localized in my native language\n  And various Tails features should still work",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;2",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2640198
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7212615746
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 27804904072
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 65244982
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14317117234
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1110421228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30088
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;3",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12845
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3638233
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6593302068
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26832500309
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 31719689
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14183871238
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 841332174
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20749
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;4",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3149379
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6484442338
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 27794657775
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 59711518
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14309075238
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 909934161
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19456
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;5",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16130
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2532147
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6663829661
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 27265583350
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 36890555
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14371309204
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 931797836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21360
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;6",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10180
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3053140
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6573308830
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 28115161860
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 97372262
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14205704256
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 833266822
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20228
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;2",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12874
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3079600
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6849432162
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6800098396
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Arabic (ar)",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24731136273
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"eg\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 71214004
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 60401457
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32349045
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12320086584
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6267762574
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5167175030
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 23894150359
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 67677301
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 11850319455
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5034386158
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5181679529
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3724215900
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 299312583
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 980213921
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20689
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;3",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12052
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2597078
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6443517631
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6953851821
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Chinese (zh_CN)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 27545063646
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"cn\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 72252769
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 84904622
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28551494
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12124119644
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5437457324
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5202326695
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 21584587668
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 110611072
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 9091454612
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5362676967
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5218955968
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3946561052
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 321880103
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 749596677
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 28835
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;4",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18524
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3363268
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6756145319
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6974906626
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in English (en)",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11888520137
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 107765032
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 92012903
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 32326602
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11214884166
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6276552232
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5185186509
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20810409449
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 73995919
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8384465122
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4018084187
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5158140855
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3663781029
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 315336575
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 805645664
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21521
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;5",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 49,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13145
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2759332
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6631319188
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 7051538848
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in French (fr)",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26540543282
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 91411539
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 86820748
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 28512845
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11310319777
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5921609423
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5198565664
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 21271853051
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 72640770
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 9599819000
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4948588945
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5171924262
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4386556392
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 354124520
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 856642729
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 38571
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;6",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12984
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3168846
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 50,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6746013843
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6821317705
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de)",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25943062592
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 81848400
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 74386451
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 37417528
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11648647821
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5676690760
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5190981577
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20977498506
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 92689140
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 11330793553
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5935218765
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5199375109
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3388097756
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 286408097
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 822873854
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23103
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;7",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14025
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2387478
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 51,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6570295911
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 7075120620
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Hindi (hi)",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26167679754
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"in\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 96575576
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 75237776
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 27854396
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11253468845
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5933580537
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5174586634
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 21387680770
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 78581588
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 9272404250
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5023398825
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5184675411
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3867222300
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 323061658
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 777817086
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21199
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;8",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12062
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2650880
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6885116854
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6783005347
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Indonesian (id)",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24832428632
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"id\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 102417431
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 69934998
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 24857189
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12467111525
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6057923735
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5202249720
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 21327853799
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 91189078
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8539135954
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5327154951
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5305174470
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3705776213
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 328104673
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 735681599
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23154
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;9",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3301013
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6347369562
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6904448854
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Italian (it)",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 27117925368
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"it\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 90318046
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 67700581
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35628214
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12711994790
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6003768644
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5224408456
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 23755452123
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 68352238
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 10650715039
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4546160373
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5197548312
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4328501185
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 390443213
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 821347795
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23364
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;10",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 54,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13925
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3344033
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6464137131
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6724959291
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Persian (fa)",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26961510861
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 83954618
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 66464524
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26818098
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12878111759
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6077589922
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5168359867
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20577819951
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 85383407
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8013508309
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5382148521
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5197807104
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3845743553
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 303523207
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 879312195
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23383
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;11",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10730
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3386392
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 55,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6574430677
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6689169870
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Portuguese (pt)",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25583751035
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"pt\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 104210656
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 97243688
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30648620
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11123667741
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 6605274191
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5163302430
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20911546516
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 89606908
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8713964414
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 5110361869
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5158959610
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3880937655
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 423520911
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1356954977
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21640
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;12",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3518500
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6626437065
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6847376775
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Russian (ru)",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 25482699221
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 115636180
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 103949393
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 35142221
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12750900935
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5462686609
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5174294542
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20689407481
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 61807593
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8732870235
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4630431156
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5185053813
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3987331784
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 366169296
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1075909827
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 31870
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;13",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19587
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3350164
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6536097424
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 7004831592
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Spanish (es)",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 26742003760
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"es\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 73558045
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 105496274
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25986557
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12835847534
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5462590324
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5202671083
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 20580993350
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 78827190
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 8447392148
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4809809625
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5212704521
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3633662454
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 295694534
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 842401577
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22913
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;14",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 58,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15469
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3353660
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 58,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6521679372
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:578"
            },
            "result": {
              "status": "passed",
              "duration": 6935833903
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Turkish (tr)",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 24652063387
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"tr\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1727"
            },
            "result": {
              "status": "passed",
              "duration": 83863312
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 99980664
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 47511122
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 12977287636
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 5914176226
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5161566110
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 21264411980
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1745"
            },
            "result": {
              "status": "passed",
              "duration": 114039229
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:457"
            },
            "result": {
              "status": "passed",
              "duration": 9010041587
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:446"
            },
            "result": {
              "status": "passed",
              "duration": 4592564297
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 5184476107
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 3910956656
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1753"
            },
            "result": {
              "status": "passed",
              "duration": 341994889
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1026772559
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23413
            }
          }
        ]
      },
      {
        "id": "localization;tails-doesn't-store-localization-preferences-in-cleartext-unless-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails doesn't store localization preferences in cleartext unless it's asked to",
        "description": "",
        "line": 60,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13857
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3523418
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9045209576
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 5569941173
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 2097324271
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5500045882
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 37756996751
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 299240724
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1179130486
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 38508433
            }
          }
        ]
      },
      {
        "id": "localization;tails-stores-localization-preferences-when-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails stores localization preferences when it's asked to",
        "description": "",
        "line": 68,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 22342
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4169274
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 69,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8652723533
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4518018793
            }
          },
          {
            "keyword": "And ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:503"
            },
            "result": {
              "status": "passed",
              "duration": 2567170994
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1901"
            },
            "result": {
              "status": "passed",
              "duration": 1207385396
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to French (fr)",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4530373548
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1901"
            },
            "result": {
              "status": "passed",
              "duration": 84921332
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 4190861584
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 76,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 40747019647
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1901"
            },
            "result": {
              "status": "passed",
              "duration": 272866491
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to French",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 817048691
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7047095262
            }
          },
          {
            "keyword": "Then ",
            "name": "the language is set to French",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1939"
            },
            "result": {
              "status": "passed",
              "duration": 39430517
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 539043446
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 13744731
            }
          }
        ]
      },
      {
        "id": "localization;cleartext-localization-preferences-have-priority-over-persistent-storage",
        "keyword": "Scenario",
        "name": "Cleartext localization preferences have priority over Persistent Storage",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 40006
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4978734
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9233181146
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 85,
            "comments": [
              {
                "value": "# The first boot simulates a legacy Tails, where locale is only saved in Persistent Storage",
                "line": 84
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 275633437
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 32181304890
            }
          },
          {
            "keyword": "And ",
            "name": "I manually store legacy localization settings in Persistent Storage",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1610"
            },
            "result": {
              "status": "passed",
              "duration": 247091184
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5460213089
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 90,
            "comments": [
              {
                "value": "# The second boot verifies that the legacy setting still works",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 34302146886
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 210533511
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 113235934
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 93,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 14287140976
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to German",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 304245072
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 179314595
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:484"
            },
            "result": {
              "status": "passed",
              "duration": 4489355123
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 2087570659
            }
          },
          {
            "keyword": "When ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:503"
            },
            "result": {
              "status": "passed",
              "duration": 2324511524
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1901"
            },
            "result": {
              "status": "passed",
              "duration": 89602300
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 2686201645
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 102,
            "comments": [
              {
                "value": "# The third boot verifies that cleartext has priority",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 33823403802
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 567017995
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Italy",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 235094176
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 14199473332
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 107,
            "comments": [
              {
                "value": "# Only formats are loaded from persistence",
                "line": 106
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 235900152
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 778416459
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1094910010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10757705
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mac_spoofing.feature",
    "id": "spoofing-mac-addresses",
    "keyword": "Feature",
    "name": "Spoofing MAC addresses",
    "description": "  In order to not reveal information about the physical location\n  As a Tails user\n  I want to be able to control whether my network devices MAC addresses should be spoofed\n  And I want this feature to fail safe and notify me in case of errors",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-disabled",
        "keyword": "Scenario",
        "name": "MAC address spoofing is disabled",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15780
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1488299
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6608000049
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 9307397
            }
          },
          {
            "keyword": "When ",
            "name": "I disable MAC spoofing in Tails Greeter",
            "line": 11,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:10"
            },
            "result": {
              "status": "passed",
              "duration": 7893260373
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11086151442
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29043012
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 9181852156
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 15,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 50899910
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has its real MAC address configured",
            "line": 16,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 46955886
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 17,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 191710284
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 18,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 61225409
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has its real MAC address configured",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 54619225
            }
          },
          {
            "keyword": "And ",
            "name": "some network device leaked the real MAC address",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 94581314
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 866387800
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35643117
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-successful",
        "keyword": "Scenario",
        "name": "MAC address spoofing is successful",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 21040
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 9584855
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6798972981
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 12318208
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11199406019
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 42138604
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11663927684
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 28,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 72622478
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 29,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 48340452
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 30,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 209558472
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 31,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 78212264
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has a spoofed MAC address configured",
            "line": 32,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 54019826
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 33,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 93580026
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1019560428
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 42549812
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-false",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns false",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15319
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2816169
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6614385158
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5471015
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34669389
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns false",
            "line": 39,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 96532659
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 12789618087
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 41,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 57542184
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 42,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 111732258
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1710377334
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 759383883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 53941831
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-true",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns true",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11692
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2564638
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6352592653
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4534337
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 34321450
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 49,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 96438373
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11300721815
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 51,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 57351116
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 52,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 119835897
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1636816424
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 542132669
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 40855609
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-the-module-is-not-removed",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and the module is not removed",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14127
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2512240
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6392367553
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5576421
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29584996
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 59,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 79113765
            }
          },
          {
            "keyword": "And ",
            "name": "no network interface modules can be unloaded",
            "line": 60,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:62"
            },
            "result": {
              "status": "passed",
              "duration": 228106333
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11354680294
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 62,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 73928394
            }
          },
          {
            "keyword": "But ",
            "name": "the MAC spoofing panic mode disabled networking",
            "line": 63,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 268863068
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 64,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 78999221
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"All Networking Disabled\" notification after at most 60 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1569415758
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 570032840
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 46092916
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;the-mac-address-is-not-leaked-when-booting-tails",
        "keyword": "Scenario",
        "name": "The MAC address is not leaked when booting Tails",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11852
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2717843
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 79018418
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 1889057
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 649331461
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 31574998282
            }
          },
          {
            "keyword": "And ",
            "name": "no network interfaces are enabled",
            "line": 72,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 51913190
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 73,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 118440973
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 734941781
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 60764825
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mat.feature",
    "id": "metadata-anonymization-toolkit",
    "keyword": "Feature",
    "name": "Metadata Anonymization Toolkit",
    "description": "  As a Tails user\n  I want to be able to remove leaky metadata from documents and media files",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "metadata-anonymization-toolkit;mat-can-clean-a-png-file",
        "keyword": "Scenario",
        "name": "MAT can clean a PNG file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15509
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4124320
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 83157401
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 48037923226
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a sample PNG",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:258"
            },
            "result": {
              "status": "passed",
              "duration": 8723332702
            }
          },
          {
            "keyword": "Then ",
            "name": "MAT can clean some sample PNG file",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:267"
            },
            "result": {
              "status": "passed",
              "duration": 967580767
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 791877875
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7346706
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/needed_package_updates.feature",
    "id": "packages-are-up-to-date",
    "keyword": "Feature",
    "name": "Packages are up-to-date",
    "description": "  On Tails branches that use frozen APT sources,\n  packages we install from frozen distributions (e.g. the Linux kernel\n  installed from testing/sid),\n  and packages forked from Debian that we install from our custom APT repository,\n  can become outdated.\n  As a Tails developer, I want to ensure we don't miss important updates.",
    "line": 3,
    "tags": [
      {
        "name": "@source",
        "line": 2
      },
      {
        "name": "@fragile",
        "line": 2
      }
    ],
    "comments": [
      {
        "value": "# This fails too loudly so let's run it on fewer branches (tails/tails#21316)",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "packages-are-up-to-date;all-packages-are-up-to-date",
        "keyword": "Scenario",
        "name": "All packages are up-to-date",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 35698
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 321440
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 12,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 755291
            }
          },
          {
            "keyword": "Then ",
            "name": "all packages listed in the build manifest are up-to-date",
            "line": 13,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:7"
            },
            "result": {
              "status": "failed",
              "error_message": "Command failed (pid 60765 exit 1): [\"/var/lib/jenkins/workspace/test_Tails_ISO_stable/bin/needed-package-updates\", \"--config=/var/lib/jenkins/workspace/test_Tails_ISO_stable/config/ci/needed-package-updates.yml\", \"--file=/var/lib/jenkins/workspace/test_Tails_ISO_stable/tmp/tails-amd64-stable@babed04ed4-20260901T0309Z.build-manifest\", {:err=>[:child, :out]}]:\nINFO: Check local file /var/lib/jenkins/workspace/test_Tails_ISO_stable/tmp/tails-amd64-stable@babed04ed4-20260901T0309Z.build-manifest\nINFO: Last successful auto-update of the UDD mirror: 2026-09-01 04:05:02+00:00 (1:49:42.502881 ago)\nINFO: Need to upgrade to a new APT snapshot:\n  - electrum[electrum] (4.7.2+dfsg-1~bpo13+1) to Debian trixie-backports (4.8.1+dfsg-1~bpo13+1)\n  - electrum[python3-electrum] (4.7.2+dfsg-1~bpo13+1) to Debian trixie-backports (4.8.1+dfsg-1~bpo13+1)\n  - firmware-nonfree (20260622-1) to Debian forky (20260810-1)\n (CommandFailed)\n/var/lib/jenkins/workspace/test_Tails_ISO_stable/features/support/helpers/misc_helpers.rb:332:in `block in cmd_helper'\n/var/lib/jenkins/workspace/test_Tails_ISO_stable/features/support/helpers/misc_helpers.rb:319:in `popen'\n/var/lib/jenkins/workspace/test_Tails_ISO_stable/features/support/helpers/misc_helpers.rb:319:in `cmd_helper'\n/var/lib/jenkins/workspace/test_Tails_ISO_stable/features/step_definitions/needed_package_updates.rb:10:in `/^all packages listed in the build manifest are up-to-date$/'\nfeatures/needed_package_updates.feature:13:in `Then all packages listed in the build manifest are up-to-date'",
              "duration": 2619881845
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 160780
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7304
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/networking.feature",
    "id": "networking",
    "keyword": "Feature",
    "name": "Networking",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "networking;no-initial-network",
        "keyword": "Scenario",
        "name": "No initial network",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13185
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3434552
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7456105875
            }
          },
          {
            "keyword": "And ",
            "name": "I wait between 30 and 60 seconds",
            "line": 6,
            "output": [
              "Slept for 58 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 58000179153
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Status icon tells me that Tor is not usable",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 261948166
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25573317
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 9535096442
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Status icon tells me that Tor is usable",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 297559955
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8102144643
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:757"
            },
            "result": {
              "status": "passed",
              "duration": 39936033
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 929007160
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25247
            }
          }
        ]
      },
      {
        "id": "networking;the-tails-greeter-\"disable-all-networking\"-option-disables-networking-within-tails",
        "keyword": "Scenario",
        "name": "The Tails Greeter \"disable all networking\" option disables networking within Tails",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 14
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2631723
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6388718827
            }
          },
          {
            "keyword": "And ",
            "name": "I disable networking in Tails Greeter",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:570"
            },
            "result": {
              "status": "passed",
              "duration": 8157832132
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10974310836
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 50280034
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 50071835
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 21,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 10000141223
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 22,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 53307357
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 736078888
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20778
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/onioncircuits.feature",
    "id": "onion-circuits",
    "keyword": "Feature",
    "name": "Onion Circuits",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "onion-circuits;onion-circuits-shows-some-circuits",
        "keyword": "Scenario",
        "name": "Onion Circuits shows some circuits",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3569023
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10737858550
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Onion Circuits\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8872604072
            }
          },
          {
            "keyword": "Then ",
            "name": "Onion Circuits starts",
            "line": 7,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 620510188
            }
          },
          {
            "keyword": "And ",
            "name": "Onion Circuits shows some circuits",
            "line": 8,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 173411865
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 910520937
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 40314
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistence.feature",
    "id": "tails-persistence",
    "keyword": "Feature",
    "name": "Tails persistence",
    "description": "  As a Tails user\n  I want to use a Persistent Storage",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-persistence;tails-persistent-storage-behave-tests",
        "keyword": "Scenario",
        "name": "Tails Persistent Storage behave tests",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10911
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3032601
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 80475162267
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 8,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 7756188930
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"python3-behave\" using apt",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6376141339
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails Persistent Storage behave tests pass",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 908476298
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 751316174
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21480
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-a-disabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with a disabled persistent partition",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3228318
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9173377591
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 16037634824
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 187299765
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is disabled",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:854"
            },
            "result": {
              "status": "passed",
              "duration": 102759549
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 5865615338
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1048407548
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19285
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15468
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3416629
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 22423569140
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 350822889
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 169922212
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 18669368869
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 24,
            "match": {
              "location": "features/step_definitions/usb.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 49493636
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5396248334
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 63699913970
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 147104787
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:1737"
            },
            "result": {
              "status": "passed",
              "duration": 45567800
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 804205164
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6869437
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage-when-system-is-low-on-memory",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage when system is low on memory",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16180
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2725399
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8383420916
            }
          },
          {
            "keyword": "And ",
            "name": "the system is very low on memory",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:395"
            },
            "result": {
              "status": "passed",
              "duration": 4540071138
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 237430915
            }
          },
          {
            "keyword": "When ",
            "name": "I try to create a persistent partition",
            "line": 34,
            "match": {
              "location": "features/step_definitions/usb.rb:373"
            },
            "result": {
              "status": "passed",
              "duration": 4502738455
            }
          },
          {
            "keyword": "Then ",
            "name": "The Persistent Storage app shows the error message \"Not enough memory to create Persistent Storage\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/usb.rb:465"
            },
            "result": {
              "status": "passed",
              "duration": 120350836
            }
          },
          {
            "keyword": "When ",
            "name": "I close the Persistent Storage app",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:442"
            },
            "result": {
              "status": "passed",
              "duration": 2446881466
            }
          },
          {
            "keyword": "And ",
            "name": "I free up some memory",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:435"
            },
            "result": {
              "status": "passed",
              "duration": 516692024
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 9410455919
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 42091259
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1271843851
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22883
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-an-enabled-persistent-partition-and-reconfiguring-it",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with an enabled persistent partition and reconfiguring it",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8556
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2793176
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8949074349
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/usb.rb:942"
            },
            "result": {
              "status": "passed",
              "duration": 285619262
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 44,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 8282990910
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 45,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 1674775356
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 3040701859
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 8323974308
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 6716413474
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 67057087742
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 8189448343
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 716547855
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6415908
            }
          }
        ]
      },
      {
        "id": "tails-persistence;activating-and-deactivating-persistent-storage-features",
        "keyword": "Scenario",
        "name": "Activating and deactivating Persistent Storage features",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13275
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3159850
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8267017759
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 74304801
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 57130476
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 56,
            "match": {
              "location": "features/step_definitions/usb.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 47951198
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 57,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2547540511
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is not active",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 66873035
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent directory does not exist",
            "line": 59,
            "match": {
              "location": "features/step_definitions/usb.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 102994185
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the first tps feature",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2455835613
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 46333557
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 62,
            "match": {
              "location": "features/step_definitions/usb.rb:1737"
            },
            "result": {
              "status": "passed",
              "duration": 58685469
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 936751929
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23303
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-data-of-a-persistent-storage-feature",
        "keyword": "Scenario",
        "name": "Deleting data of a Persistent Storage feature",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18895
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5033948
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 65,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7773990340
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1079"
            },
            "result": {
              "status": "passed",
              "duration": 86637136
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 48139930
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the first tps feature",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:302"
            },
            "result": {
              "status": "passed",
              "duration": 2540554229
            }
          },
          {
            "keyword": "And ",
            "name": "I delete the data of the Persistent Folder feature",
            "line": 69,
            "match": {
              "location": "features/step_definitions/usb.rb:1747"
            },
            "result": {
              "status": "passed",
              "duration": 2991852788
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created does not exist on the Persistent Storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/usb.rb:1732"
            },
            "result": {
              "status": "passed",
              "duration": 41434040
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 759105052
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 45806
            }
          }
        ]
      },
      {
        "id": "tails-persistence;writing-files-to-a-read/write-enabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition",
        "description": "",
        "line": 72,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 19055
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 7438348
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 73,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7862543152
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 37484726
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10336958823
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:1122"
            },
            "result": {
              "status": "passed",
              "duration": 6898579322
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1082"
            },
            "result": {
              "status": "passed",
              "duration": 1094175903
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5234319671
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"__internal\"",
            "line": 80,
            "comments": [
              {
                "value": "# XXX: The next step succeeds (and the --debug output confirms that it's actually looking for the files) but will fail in a subsequent scenario restoring the same snapshot. This exactly what we want, but why does it work? What is guestfs's behaviour when qcow2 internal snapshots are involved? (tails/tails#10330)",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 11927604646
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 363109261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 17102
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-and-using-a-persistent-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Creating and using a persistent NetworkManager connection",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13524
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3100179
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7737016181
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 30930621
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10341726232
            }
          },
          {
            "keyword": "And ",
            "name": "I add a wired DHCP NetworkManager connection called \"persistent-con-current\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:985"
            },
            "result": {
              "status": "passed",
              "duration": 198817198
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5270982707
            }
          },
          {
            "keyword": "Given ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 66180440164
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 7107599
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 414902930
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 11745820866
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"persistent-con-current\" NetworkManager connection",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1000"
            },
            "result": {
              "status": "passed",
              "duration": 365091525
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 93,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 53852407
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 94,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 97597065
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 768721999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 67362423
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-persistence-from-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Creating persistence from the Welcome Screen",
        "description": "",
        "line": 96,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15699
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2979492
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 97,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8322042056
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence creation in Tails Greeter",
            "line": 98,
            "match": {
              "location": "features/step_definitions/usb.rb:330"
            },
            "result": {
              "status": "passed",
              "duration": 1062187701
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session expecting no warning about the Persistent Storage not being activated",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 13033166165
            }
          },
          {
            "keyword": "Then ",
            "name": "I create a persistent partition with the default settings using the wizard that was already open",
            "line": 100,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 18833372963
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 935137012
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22442
            }
          }
        ]
      },
      {
        "id": "tails-persistence;persistent-greeter-options",
        "keyword": "Scenario",
        "name": "Persistent Greeter options",
        "description": "",
        "line": 102,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8827
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3024296
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 103,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8404638714
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 22763639150
            }
          },
          {
            "keyword": "Then ",
            "name": "no persistent Greeter options were restored",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 13526447188
            }
          },
          {
            "keyword": "When ",
            "name": "I set all Greeter options to non-default values",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1634"
            },
            "result": {
              "status": "passed",
              "duration": 38342905160
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 431914673
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 192862501
            }
          },
          {
            "keyword": "When ",
            "name": "I set the formats to \"Belgien - Deutsch\"",
            "line": 110,
            "comments": [
              {
                "value": "# We need to set a format explicitly, or it won't be restored later",
                "line": 109
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:470"
            },
            "result": {
              "status": "passed",
              "duration": 4506586872
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de) after having activated the Persistent Storage",
            "line": 111,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 23735908514
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1658"
            },
            "result": {
              "status": "passed",
              "duration": 164387252
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 6162257166
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 33223537060
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 414658006
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 116,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 263130300
            }
          },
          {
            "keyword": "Given ",
            "name": "I enable persistence",
            "line": 117,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 13579462582
            }
          },
          {
            "keyword": "Then ",
            "name": "persistent Greeter options were restored",
            "line": 118,
            "match": {
              "location": "features/step_definitions/usb.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 106668060
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Belgium",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1932"
            },
            "result": {
              "status": "passed",
              "duration": 204228042
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 120,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8086361918
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 121,
            "match": {
              "location": "features/step_definitions/usb.rb:1658"
            },
            "result": {
              "status": "passed",
              "duration": 149924684
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 989711506
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6602137
            }
          }
        ]
      },
      {
        "id": "tails-persistence;changing-the-persistent-storage-passphrase",
        "keyword": "Scenario",
        "name": "Changing the Persistent Storage passphrase",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12754
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3437608
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8590919344
            }
          },
          {
            "keyword": "When ",
            "name": "I change the passphrase of the Persistent Storage",
            "line": 128,
            "comments": [
              {
                "value": "# Note that if anything fails after the passphrase was changed and",
                "line": 125
              },
              {
                "value": "# before it's changed back below, subsequent scenarios might fail",
                "line": 126
              },
              {
                "value": "# because the Persistent Storage doesn't have the expected passphrase.",
                "line": 127
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:469"
            },
            "result": {
              "status": "passed",
              "duration": 29206631705
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5415238557
            }
          },
          {
            "keyword": "Then ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with the changed persistence passphrase",
            "line": 130,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 65438860485
            }
          },
          {
            "keyword": "And ",
            "name": "I change the passphrase of the Persistent Storage back to the original",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:469"
            },
            "result": {
              "status": "passed",
              "duration": 25622350097
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1338561304
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8590890
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-a-tails-persistent-partition",
        "keyword": "Scenario",
        "name": "Deleting a Tails persistent partition",
        "description": "",
        "line": 133,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16951
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4776117
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 134,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8430589031
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 135,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 13711972823
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is disabled",
            "line": 136,
            "match": {
              "location": "features/step_definitions/usb.rb:854"
            },
            "result": {
              "status": "passed",
              "duration": 92451094
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 137,
            "match": {
              "location": "features/step_definitions/usb.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 5849461260
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8747935902
            }
          },
          {
            "keyword": "When ",
            "name": "I delete the persistent partition",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:1201"
            },
            "result": {
              "status": "passed",
              "duration": 3002838365
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no persistence partition on USB drive \"__internal\"",
            "line": 140,
            "match": {
              "location": "features/step_definitions/usb.rb:613"
            },
            "result": {
              "status": "passed",
              "duration": 286055489
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 604014276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 77385
            }
          }
        ]
      },
      {
        "id": "tails-persistence;dotfiles-persistence",
        "keyword": "Scenario",
        "name": "Dotfiles persistence",
        "description": "",
        "line": 142,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 27112
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 10664733
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 143,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8372997427
            }
          },
          {
            "keyword": "When ",
            "name": "I write some dotfile expected to persist",
            "line": 144,
            "match": {
              "location": "features/step_definitions/usb.rb:1092"
            },
            "result": {
              "status": "passed",
              "duration": 43758202
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 145,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 5303874341
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 146,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 67343127736
            }
          },
          {
            "keyword": "Then ",
            "name": "the expected persistent dotfile is present in the filesystem",
            "line": 147,
            "match": {
              "location": "features/step_definitions/usb.rb:1147"
            },
            "result": {
              "status": "passed",
              "duration": 242423542
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1000686884
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5747921
            }
          }
        ]
      },
      {
        "id": "tails-persistence;feature-activation-fails",
        "keyword": "Scenario",
        "name": "Feature activation fails",
        "description": "",
        "line": 149,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15540
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2921996
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 150,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7986764462
            }
          },
          {
            "keyword": "And ",
            "name": "I create a symlink \"/home/amnesia/Persistent\" to \"/etc\"",
            "line": 151,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1785"
            },
            "result": {
              "status": "passed",
              "duration": 80646232
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 152,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1215437008
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the Persistent Folder feature couldn't be activated",
            "line": 153,
            "match": {
              "location": "features/step_definitions/usb.rb:1780"
            },
            "result": {
              "status": "passed",
              "duration": 13994440805
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 154,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7357368095
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 155,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7612769677
            }
          },
          {
            "keyword": "Then ",
            "name": "the Persistent Storage settings tell me that the Persistent Folder feature couldn't be activated",
            "line": 156,
            "match": {
              "location": "features/step_definitions/usb.rb:1803"
            },
            "result": {
              "status": "passed",
              "duration": 1299393602
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are enabled",
            "line": 157,
            "match": {
              "location": "features/step_definitions/usb.rb:805"
            },
            "result": {
              "status": "passed",
              "duration": 8330218666
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features but the first one are active",
            "line": 158,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 8986142083
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 939271367
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35546
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-header-is-automatically-upgraded-when-unlocking-the-persistent-storage",
        "keyword": "Scenario",
        "name": "LUKS header is automatically upgraded when unlocking the Persistent Storage",
        "description": "",
        "line": 160,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12934
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4675630
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 161,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 119720337275
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 162,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 28001211036
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 163,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8221833703
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition with LUKS version 2 and argon2id exists on USB drive \"__internal\"",
            "line": 164,
            "match": {
              "location": "features/step_definitions/usb.rb:643"
            },
            "result": {
              "status": "passed",
              "duration": 801264144
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is enabled",
            "line": 165,
            "match": {
              "location": "features/step_definitions/usb.rb:858"
            },
            "result": {
              "status": "passed",
              "duration": 8934959903
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 849515662
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18264
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-backup-header-is-restored-if-something-goes-wrong-during-upgrade",
        "keyword": "Scenario",
        "name": "LUKS backup header is restored if something goes wrong during upgrade",
        "description": "",
        "line": 167,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9077
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3547984
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 168,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7470575982
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence but something goes wrong during the LUKS header upgrade",
            "line": 169,
            "match": {
              "location": "features/step_definitions/usb.rb:733"
            },
            "result": {
              "status": "passed",
              "duration": 22540229811
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails persistence partition on USB drive \"__internal\" still has LUKS version 1",
            "line": 170,
            "match": {
              "location": "features/step_definitions/usb.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 620506231
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 583761648
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21650
            }
          }
        ]
      },
      {
        "id": "tails-persistence;automatic-filesystem-repair",
        "keyword": "Scenario",
        "name": "Automatic filesystem repair",
        "description": "",
        "line": 172,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10561
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3236212
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 173,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9150096440
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\"",
            "line": 174,
            "match": {
              "location": "features/step_definitions/usb.rb:1830"
            },
            "result": {
              "status": "passed",
              "duration": 10076067299
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 175,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 13564950842
            }
          },
          {
            "keyword": "Then ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 176,
            "match": {
              "location": "features/step_definitions/usb.rb:1872"
            },
            "result": {
              "status": "passed",
              "duration": 53331371
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is successfully enabled",
            "line": 177,
            "match": {
              "location": "features/step_definitions/usb.rb:708"
            },
            "result": {
              "status": "passed",
              "duration": 8728035567
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 790434027
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25108
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-is-successful",
        "keyword": "Scenario",
        "name": "Manual filesystem repair is successful",
        "description": "",
        "line": 179,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9307
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3512117
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 180,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8363227368
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 181,
            "match": {
              "location": "features/step_definitions/usb.rb:1830"
            },
            "result": {
              "status": "passed",
              "duration": 10508571536
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 182,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1310248106
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 183,
            "match": {
              "location": "features/step_definitions/usb.rb:1788"
            },
            "result": {
              "status": "passed",
              "duration": 3113524822
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 184,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 1248478340
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the filesystem was repaired successfully",
            "line": 185,
            "match": {
              "location": "features/step_definitions/usb.rb:1884"
            },
            "result": {
              "status": "passed",
              "duration": 326637512
            }
          },
          {
            "keyword": "And ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 186,
            "match": {
              "location": "features/step_definitions/usb.rb:1872"
            },
            "result": {
              "status": "passed",
              "duration": 51318394
            }
          },
          {
            "keyword": "When ",
            "name": "I close the filesystem repair dialog",
            "line": 187,
            "match": {
              "location": "features/step_definitions/usb.rb:1890"
            },
            "result": {
              "status": "passed",
              "duration": 1103932146
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is successfully enabled",
            "line": 188,
            "match": {
              "location": "features/step_definitions/usb.rb:708"
            },
            "result": {
              "status": "passed",
              "duration": 3221785031
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1136341895
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 28965
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-fails",
        "keyword": "Scenario",
        "name": "Manual filesystem repair fails",
        "description": "",
        "line": 191,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 190
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9017
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2790770
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 192,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8104293555
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent Storage filesystem is corrupted beyond what e2fsck can repair",
            "line": 193,
            "match": {
              "location": "features/step_definitions/usb.rb:1863"
            },
            "result": {
              "status": "passed",
              "duration": 57088479
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 194,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1244910946
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 195,
            "match": {
              "location": "features/step_definitions/usb.rb:1788"
            },
            "result": {
              "status": "passed",
              "duration": 11647810759
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 196,
            "match": {
              "location": "features/step_definitions/usb.rb:1880"
            },
            "result": {
              "status": "passed",
              "duration": 1145334123
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that it failed to repair the Persistent Storage",
            "line": 197,
            "match": {
              "location": "features/step_definitions/usb.rb:1795"
            },
            "result": {
              "status": "passed",
              "duration": 27595384
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 198,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 10202665216
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 199,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7534335612
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack is prefilled for fsck with summary: \"Failed to repair the file system of your Persistent Storage\"",
            "line": 205,
            "comments": [
              {
                "value": "# Now both WhisperBack and Tor Browser has started at the same",
                "line": 200
              },
              {
                "value": "# time, so we do not know which window is focused. The steps about",
                "line": 201
              },
              {
                "value": "# Tor Browser care about that, but the ones about WhisperBack do",
                "line": 202
              },
              {
                "value": "# not, so we first deal with WhisperBack and then kill it to",
                "line": 203
              },
              {
                "value": "# ensure that Tor Browser is focused.",
                "line": 204
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1882"
            },
            "result": {
              "status": "passed",
              "duration": 307636930
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/var/lib/gdm3/post-greeter-whisperback.json\" is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1051"
            },
            "result": {
              "status": "passed",
              "duration": 89245828
            }
          },
          {
            "keyword": "When ",
            "name": "I close the \"whisperback\" window",
            "line": 207,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 1173620936
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 208,
            "match": {
              "location": "features/step_definitions/browser.rb:511"
            },
            "result": {
              "status": "passed",
              "duration": 1175163657
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 209,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 832118215
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 969587552
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20898
            }
          }
        ]
      },
      {
        "id": "tails-persistence;filesystem-and-i/o-errors",
        "keyword": "Scenario",
        "name": "Filesystem and I/O errors",
        "description": "",
        "line": 212,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 211
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11683
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2754764
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 213,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8522443284
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 214,
            "match": {
              "location": "features/step_definitions/usb.rb:1830"
            },
            "result": {
              "status": "passed",
              "duration": 10805881750
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 215,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1353627281
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 216,
            "match": {
              "location": "features/step_definitions/usb.rb:697"
            },
            "result": {
              "status": "passed",
              "duration": 1195913328
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that my hardware is probably failing",
            "line": 217,
            "match": {
              "location": "features/step_definitions/usb.rb:1898"
            },
            "result": {
              "status": "passed",
              "duration": 3172773430
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 218,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8955234026
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 219,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7038851209
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 220,
            "match": {
              "location": "features/step_definitions/browser.rb:511"
            },
            "result": {
              "status": "passed",
              "duration": 1505313178
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 221,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 837110046
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1075293242
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21962
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistent_tor_bridges.feature",
    "id": "using-persistent-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using persistent Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to save Tor bridges in Persistent Storage\n  And be given the option to use them again",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 20759
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3534349
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9487258694
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 20143320435
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:829"
            },
            "result": {
              "status": "passed",
              "duration": 405097616
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26036752
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4698408798
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10804828343
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1000098486
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 8358186
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 946930499
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 6072850442
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 34421597387
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 11552370256
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3113934
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7183116936
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 6753169
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 36212162
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4449471874
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;using-persistent-tor-bridges",
        "keyword": "Scenario",
        "name": "Using Persistent Tor bridges",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1252447863
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:880"
            },
            "result": {
              "status": "passed",
              "duration": 1752449960
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1248982664
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 5988569838
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 31,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 4624826
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 910702858
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 33,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 382184942
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 906340974
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 61097623
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14617
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 1743015
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8314225841
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:349"
            },
            "result": {
              "status": "passed",
              "duration": 18200802512
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:829"
            },
            "result": {
              "status": "passed",
              "duration": 395744918
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25202686
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 1786398584
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10837553433
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1135194092
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 6406782
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 867740834
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 4688392829
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 32872552300
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 10519966286
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3118543
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7180025019
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1200"
            },
            "result": {
              "status": "passed",
              "duration": 6065556
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 26379142
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4434431489
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;disabling-persistence-of-tor-bridges",
        "keyword": "Scenario",
        "name": "Disabling persistence of Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1243007319
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 37,
            "match": {
              "location": "features/step_definitions/tor.rb:880"
            },
            "result": {
              "status": "passed",
              "duration": 1786153584
            }
          },
          {
            "keyword": "And ",
            "name": "I disable saving bridges to Persistent Storage",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:779"
            },
            "result": {
              "status": "passed",
              "duration": 1283191670
            }
          },
          {
            "keyword": "And ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 5573942607
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1678027058
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1196"
            },
            "result": {
              "status": "passed",
              "duration": 5523753
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is not enabled and not active",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:849"
            },
            "result": {
              "status": "passed",
              "duration": 1161727248
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 43,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1059"
            },
            "result": {
              "status": "passed",
              "duration": 429396719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 827575143
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 50498647
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/pidgin.feature",
    "id": "chatting-anonymously-using-pidgin",
    "keyword": "Feature",
    "name": "Chatting anonymously using Pidgin",
    "description": "  As a Tails user\n  when I chat using Pidgin\n  I should be able to persist my Pidgin configuration\n  And all Internet traffic should flow only through Tor",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 2
      },
      {
        "name": "@fragile",
        "line": 2
      }
    ],
    "comments": [
      {
        "value": "#19040",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "chatting-anonymously-using-pidgin;make-sure-pidgin's-d-bus-interface-is-blocked",
        "keyword": "Scenario",
        "name": "Make sure Pidgin's D-Bus interface is blocked",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3522857
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7171536155
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9935311817
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 12,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1243435940
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin's D-Bus interface is not available",
            "line": 13,
            "match": {
              "location": "features/step_definitions/pidgin.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 755895377
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 637595435
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20328
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;chatting-with-some-friend-over-xmpp",
        "keyword": "Scenario",
        "name": "Chatting with some friend over XMPP",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10561
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2873064
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1941766
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 11141081468
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 10050451408
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 19,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1244167534
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 20,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 10954681064
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 21,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 483580980
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 22,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 17801293135
            }
          },
          {
            "keyword": "Given ",
            "name": "my XMPP friend goes online",
            "line": 23,
            "match": {
              "location": "features/step_definitions/pidgin.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 15536757900
            }
          },
          {
            "keyword": "When ",
            "name": "I start a conversation with my friend",
            "line": 24,
            "match": {
              "location": "features/step_definitions/pidgin.rb:170"
            },
            "result": {
              "status": "passed",
              "duration": 16327499300
            }
          },
          {
            "keyword": "And ",
            "name": "I say something to my friend",
            "line": 25,
            "match": {
              "location": "features/step_definitions/pidgin.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 16592904457
            }
          },
          {
            "keyword": "Then ",
            "name": "I receive a response from my friend",
            "line": 26,
            "match": {
              "location": "features/step_definitions/pidgin.rb:195"
            },
            "result": {
              "status": "passed",
              "duration": 15930548844
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 250299600
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1160830275
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6805718
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;using-a-persistent-pidgin-configuration",
        "keyword": "Scenario",
        "name": "Using a persistent Pidgin configuration",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 28
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 33713
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 12806062
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 29165856
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9188335464
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25594597
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 10097218692
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1084080122
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7836425371
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 10151969502
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 36,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 871425740
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 37,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 10849648511
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 38,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 449440483
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 39,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 17687604545
            }
          },
          {
            "keyword": "When ",
            "name": "I close Pidgin",
            "line": 40,
            "match": {
              "location": "features/step_definitions/pidgin.rb:240"
            },
            "result": {
              "status": "passed",
              "duration": 16136636963
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of the configured Pidgin accounts",
            "line": 41,
            "match": {
              "location": "features/step_definitions/pidgin.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 10912065
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 6610057740
            }
          },
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 100934762
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 74520174864
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin has the expected persistent accounts configured",
            "line": 45,
            "match": {
              "location": "features/step_definitions/pidgin.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 8141822
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 9900103455
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 47,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 17630408732
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 315362518
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1019269167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 55451184
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/qt.feature",
    "id": "the-right-version-of-qt-packages-are-installed",
    "keyword": "Feature",
    "name": "The right version of Qt packages are installed",
    "description": "    We don't ship software which depends on Qt5.\n    As a Tails developer, I want to ensure we don't ship Qt5.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-right-version-of-qt-packages-are-installed;no-qt5-package-is-installed",
        "keyword": "Scenario",
        "name": "No Qt5 package is installed",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 24697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:552"
            },
            "result": {
              "status": "passed",
              "duration": 112410
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 7,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 56265
            }
          },
          {
            "keyword": "Then ",
            "name": "no Qt5 package is installed",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:27"
            },
            "result": {
              "status": "passed",
              "duration": 27525132
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:559"
            },
            "result": {
              "status": "passed",
              "duration": 155761
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6863
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/random_seed.feature",
    "id": "random-seed",
    "keyword": "Feature",
    "name": "Random Seed",
    "description": "  As a Tails user\n  I want Tails to use secure random numbers",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "random-seed;a-random-seed-is-read-during-boot-and-written-during-boot-and-shutdown",
        "keyword": "Scenario",
        "name": "A random seed is read during boot and written during boot and shutdown",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 6361
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4022961
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 104897725
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:114"
            },
            "result": {
              "status": "passed",
              "duration": 24738910
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 1024653895
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1805"
            },
            "result": {
              "status": "passed",
              "duration": 13729536202
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no random seed on USB drive \"temp\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2542983196
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 56939240214
            }
          },
          {
            "keyword": "Then ",
            "name": "the random seed was written multiple times on first boot",
            "line": 13,
            "match": {
              "location": "features/step_definitions/random_seed.rb:72"
            },
            "result": {
              "status": "passed",
              "duration": 209463579
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2580772746
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7179318757
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for the random seed to be updated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/random_seed.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 1047367424
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2756165151
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 18,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 97782
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:908"
            },
            "result": {
              "status": "passed",
              "duration": 3945480783
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2628294324
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 21,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 34123
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 593168410
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 173389435
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/sane_defaults.feature",
    "id": "tails-has-a-sane-default-configuration",
    "keyword": "Feature",
    "name": "Tails has a sane default configuration",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-has-a-sane-default-configuration;users-are-set-up-correctly",
        "keyword": "Scenario",
        "name": "Users are set up correctly",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17873
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2826678
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6960017059
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user has been setup by live-boot",
            "line": 6,
            "match": {
              "location": "features/step_definitions/checks.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 106423962
            }
          },
          {
            "keyword": "And ",
            "name": "the live user is a member of only its own group and \"cdrom dialout floppy video plugdev netdev scanner lp lpadmin users\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 51872801
            }
          },
          {
            "keyword": "And ",
            "name": "the live user owns its home directory which has strict permissions",
            "line": 8,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 169217846
            }
          },
          {
            "keyword": "And ",
            "name": "the root user owns its home directory which has strict permissions",
            "line": 9,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 125779382
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 751253801
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 66182
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-network-services",
        "keyword": "Scenario",
        "name": "No unexpected network services",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 43943
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 15044589
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10741026402
            }
          },
          {
            "keyword": "Then ",
            "name": "no unexpected services are listening for network connections",
            "line": 14,
            "output": [
              "Service 'tor' is listening on 10.200.1.1:9050 but has an exception",
              "Service 'onion-grater' is listening on 0.0.0.0:951 but has an exception"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:177"
            },
            "result": {
              "status": "passed",
              "duration": 102140186
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 850219859
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 17783
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;the-live-user-can-only-access-the-expected-local-services",
        "keyword": "Scenario",
        "name": "The live user can only access the expected local services",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12214
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2920845
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9304487267
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user can only access allowed local services",
            "line": 18,
            "output": [
              "amnesia could access tor on 127.0.0.1:5353 (UDP) as expected",
              "amnesia could access cupsd on 127.0.0.1:631 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9050 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9052 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9040 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9063 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9062 (TCP) as expected",
              "amnesia could access tor on 10.200.1.1:9050 (TCP) as expected",
              "amnesia could access onion-grater on 0.0.0.0:951 (TCP) as expected"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:192"
            },
            "result": {
              "status": "passed",
              "duration": 5528050904
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 936799874
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 53710
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-dvd",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from DVD",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 29255
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 10780578
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 21,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7470354216
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 22,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 41668863
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 689013994
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21631
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-usb-drive",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from USB drive",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12693
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3433491
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8764629872
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 26,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 84402562
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 892035775
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21499
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/secrets.feature",
    "id": "using-secrets",
    "keyword": "Feature",
    "name": "Using Secrets",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-secrets;i-can-easily-access-kdbx-files-in-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can easily access kdbx files in /home/amnesia/Persistent",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10559
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2700532
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8859765854
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 6,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 24968643840
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/home/amnesia/Persistent/Passwords.kdbx\" with contents \"\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1777"
            },
            "result": {
              "status": "passed",
              "duration": 6534732
            }
          },
          {
            "keyword": "And ",
            "name": "I change ownership of file \"/home/amnesia/Persistent/Passwords.kdbx\" to \"amnesia:\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1781"
            },
            "result": {
              "status": "passed",
              "duration": 41945818
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 8579746662
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 10248615856
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/Persistent/Passwords.kdbx\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 2039307469
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1215325454
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25378
            }
          }
        ]
      },
      {
        "id": "using-secrets;i-can-open-kdbx-files-in-secrets",
        "keyword": "Scenario",
        "name": "I can open kdbx files in Secrets",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13635
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3142317
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7638523641
            }
          },
          {
            "keyword": "And ",
            "name": "I have a \"MyPass.kdbx\" file in my home",
            "line": 15,
            "match": {
              "location": "features/step_definitions/secrets.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 5351632
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 7752496101
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"MyPass.kdbx\" in Files",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1993"
            },
            "result": {
              "status": "passed",
              "duration": 5930632456
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/MyPass.kdbx\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 3323646170
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1291367894
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24325
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/shutdown_applet.feature",
    "id": "shutdown-buttons-in-the-system-menu",
    "keyword": "Feature",
    "name": "Shutdown buttons in the system menu",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-shutdown-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can shutdown Tails via the system menu",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14818
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3947039
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10964283587
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2555681044
            }
          },
          {
            "keyword": "And ",
            "name": "I request a shutdown using the system menu",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:927"
            },
            "result": {
              "status": "passed",
              "duration": 6472257187
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 6684263428
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 88496074
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18886
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-reboot-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can reboot Tails via the system menu",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 10
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13096
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3283811
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9386640871
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2496603712
            }
          },
          {
            "keyword": "When ",
            "name": "I request a reboot using the system menu",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:927"
            },
            "result": {
              "status": "passed",
              "duration": 6554057943
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually restarts",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 37681793924
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 3409408928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21791
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;the-logout-button-is-not-visible",
        "keyword": "Scenario",
        "name": "The logout button is not visible",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2760744
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9827409313
            }
          },
          {
            "keyword": "When ",
            "name": "I open the system menu",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 2488887295
            }
          },
          {
            "keyword": "Then ",
            "name": "the logout button is not visible",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:953"
            },
            "result": {
              "status": "passed",
              "duration": 4156962530
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 664590544
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19896
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/ssh.feature",
    "id": "logging-in-via-ssh",
    "keyword": "Feature",
    "name": "Logging in via SSH",
    "description": "  As a Tails user\n  When I connect to SSH servers on the Internet\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12403
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3061707
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1796174
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9604870951
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-internet-works-and-uses-the-default-socksport",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the Internet works and uses the default SocksPort",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 10
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I monitor the network connections of SSH",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 45511573
            }
          },
          {
            "keyword": "And ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 13,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 253529377
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the Internet",
            "line": 14,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 7839986312
            }
          },
          {
            "keyword": "Then ",
            "name": "I have successfully logged into the SSH server",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 1276474949
            }
          },
          {
            "keyword": "And ",
            "name": "I see that SSH is properly stream isolated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 6428412
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 270861323
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 950374863
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 99557
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13135
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3538227
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3673709
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21704205448
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-lan",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the LAN",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 18
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 20,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 180125654
            }
          },
          {
            "keyword": "And ",
            "name": "an SSH server is running on the LAN",
            "line": 21,
            "match": {
              "location": "features/step_definitions/ssh.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 51289961
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the LAN",
            "line": 22,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 5515185937
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to verify the SSH fingerprint for the SSH server",
            "line": 23,
            "match": {
              "location": "features/step_definitions/ssh.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 1586995397
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 283834123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 816939001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 931579
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/thunderbird.feature",
    "id": "thunderbird-email-client",
    "keyword": "Feature",
    "name": "Thunderbird email client",
    "description": "  As a Tails user\n  I may want to use an email client",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16311
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3350095
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2085103
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 81195262811
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 48252056
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 26206682532
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 1824136744
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 1326909144
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;no-add-ons-are-installed",
        "keyword": "Scenario",
        "name": "No add-ons are installed",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I cancel setting up an email account",
            "line": 14,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 2413578605
            }
          },
          {
            "keyword": "When ",
            "name": "I open Thunderbird's Add-ons Manager",
            "line": 15,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1484634998
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Extensions tab",
            "line": 16,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:67"
            },
            "result": {
              "status": "passed",
              "duration": 1036899801
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that no add-ons are enabled in Thunderbird",
            "line": 17,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 10260609861
            }
          },
          {
            "keyword": "And ",
            "name": "no unexpected connection has leaked from Thunderbird",
            "line": 18,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:248"
            },
            "result": {
              "status": "passed",
              "duration": 353481626
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 1858288866
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 2091673137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18115762
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17003
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3908446
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6029147
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9593401330
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 36285072
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 26475329787
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2293193627
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 968301745
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;i-can-send-emails,-and-receive-emails-over-imap",
        "keyword": "Scenario",
        "name": "I can send emails, and receive emails over IMAP",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I enter my email credentials into the autoconfiguration wizard",
            "line": 21,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:85"
            },
            "result": {
              "status": "passed",
              "duration": 43026151092
            }
          },
          {
            "keyword": "Then ",
            "name": "the autoconfiguration wizard's choice for the incoming server is secure IMAP",
            "line": 22,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 200605087
            }
          },
          {
            "keyword": "And ",
            "name": "the autoconfiguration wizard's choice for the outgoing server is secure SMTP",
            "line": 23,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 252021969
            }
          },
          {
            "keyword": "When ",
            "name": "I accept the autoconfiguration wizard's configuration",
            "line": 24,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 48444082466
            }
          },
          {
            "keyword": "And ",
            "name": "I send an email to myself",
            "line": 25,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 5590955181
            }
          },
          {
            "keyword": "And ",
            "name": "I fetch my email",
            "line": 26,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:127"
            },
            "result": {
              "status": "passed",
              "duration": 1227052943
            }
          },
          {
            "keyword": "Then ",
            "name": "I can find the email I sent to myself in my inbox",
            "line": 27,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5264290278
            }
          },
          {
            "keyword": "And ",
            "name": "the system only established connections with my email server",
            "line": 28,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:256"
            },
            "result": {
              "status": "passed",
              "duration": 533883468
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 1602051582
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 937253466
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9216316
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_connection.feature",
    "id": "tor-connection-helps-the-user-in-connecting-to-tor",
    "keyword": "Feature",
    "name": "Tor Connection helps the user in connecting to Tor",
    "description": "    As a Tails user\n    I want to use Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15909
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3410248
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7361854678
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;starting-tor-connection-before-connecting-to-wi-fi",
        "keyword": "Scenario",
        "name": "Starting Tor Connection before connecting to Wi-Fi",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8935826184
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that I am not connected to a local network",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:1247"
            },
            "result": {
              "status": "passed",
              "duration": 1261699288
            }
          },
          {
            "keyword": "When ",
            "name": "I plug a Wi-Fi adapter",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:1250"
            },
            "result": {
              "status": "passed",
              "duration": 414687494
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection suggests me to connect to Wi-Fi",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:1254"
            },
            "result": {
              "status": "passed",
              "duration": 734966309
            }
          },
          {
            "keyword": "And ",
            "name": "I click on the Wi-Fi settings",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 1097469157
            }
          },
          {
            "keyword": "And ",
            "name": "The Wi-Fi settings are displayed",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 2480271387
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 961273245
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24315
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9388
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3969992
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6721567171
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;time-syncing-works-even-if-the-user-waits-a-lot-before-connecting",
        "keyword": "Scenario",
        "name": "Time syncing works even if the user waits a lot before connecting",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 34
          },
          {
            "name": "@not_release_blocker",
            "line": 34
          },
          {
            "name": "@skip_by_default",
            "line": 34
          }
        ],
        "comments": [
          {
            "value": "# # this is not great, but it's the current status",
            "line": 17
          },
          {
            "value": "# Scenario: switching to a network with no Internet doesn't yield any error message",
            "line": 18
          },
          {
            "value": "#     Given the network is plugged",
            "line": 19
          },
          {
            "value": "#     And Tor is ready",
            "line": 20
          },
          {
            "value": "#     And I close \"Tor Connection\"",
            "line": 21
          },
          {
            "value": "#     When the network is unplugged",
            "line": 22
          },
          {
            "value": "#     And the Tor network and default bridges are blocked",
            "line": 23
          },
          {
            "value": "#     And I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 24
          },
          {
            "value": "#     Then \"Tor Connection\" shows the success screen",
            "line": 25
          },
          {
            "value": "# Scenario: Close Tor Connection and open again",
            "line": 27
          },
          {
            "value": "#     Given Tor is ready",
            "line": 28
          },
          {
            "value": "#     When I close \"Tor Connection\"",
            "line": 29
          },
          {
            "value": "#     And I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 30
          },
          {
            "value": "#     Then \"Tor Connection\" shows the success screen",
            "line": 31
          },
          {
            "value": "# regression test for #18868",
            "line": 33
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25961639
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 720 seconds",
            "line": 37,
            "output": [
              "Slept for 720 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 720000281480
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 6475485422
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:757"
            },
            "result": {
              "status": "passed",
              "duration": 34720453
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 702964291
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22834
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10350
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3133570
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6421104989
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;bridges-are-not-enabled-in-automatic-mode-when-going-back-from-hiding-tor",
        "keyword": "Scenario",
        "name": "Bridges are not enabled in automatic mode when going back from hiding Tor",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "comments": [
          {
            "value": "# regression test for #18546",
            "line": 41
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 103262449
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 2026822063
            }
          },
          {
            "keyword": "And ",
            "name": "I look at the hide mode but then I go back",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:556"
            },
            "result": {
              "status": "passed",
              "duration": 4172161964
            }
          },
          {
            "keyword": "And ",
            "name": "I choose to connect to Tor automatically",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1168843126
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection does not propose me to use Tor bridges",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:899"
            },
            "result": {
              "status": "passed",
              "duration": 67058898
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 692099410
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20818
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9738
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3632611
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6352734062
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;i-can-use-a-network-with-captive-portal",
        "keyword": "Scenario",
        "name": "I can use a network with captive portal",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 51,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 1174448750
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 33879902
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects indicates a captive portal",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1140986857
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 810473560
            }
          },
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 1355789729
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1088337918
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 26079028291
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that it's not the time sync that failed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:474"
            },
            "result": {
              "status": "passed",
              "duration": 10361537770
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that there might be a captive portal",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:480"
            },
            "result": {
              "status": "passed",
              "duration": 129711498
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Unsafe Browser from Tor Connection",
            "line": 60,
            "match": {
              "location": "features/step_definitions/tor.rb:1215"
            },
            "result": {
              "status": "passed",
              "duration": 5622246759
            }
          },
          {
            "keyword": "And ",
            "name": "I log-in to the Captive Portal",
            "line": 61,
            "match": {
              "location": "features/step_definitions/browser.rb:480"
            },
            "result": {
              "status": "passed",
              "duration": 5504678236
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 121010411
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 992229940
            }
          },
          {
            "keyword": "And ",
            "name": "I allow time sync before Tor connects to work again",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 37710732
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 1144598555
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 4707453599
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 529910619
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 608235
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_enforcement.feature",
    "id": "the-tor-enforcement-is-effective",
    "keyword": "Feature",
    "name": "The Tor enforcement is effective",
    "description": "  As a Tails user\n  I want all direct Internet connections I do by mistake or applications do by misconfiguration or buggy leaks to be blocked\n  And as a Tails developer\n  I want to ensure that the automated test suite detects firewall leaks reliably",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-tor-enforcement-is-effective;the-firewall-configuration-is-very-restrictive",
        "keyword": "Scenario",
        "name": "The firewall configuration is very restrictive",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9007
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3010911
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 10240187283
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall's policy is to drop all IPv4 traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/tor.rb:64"
            },
            "result": {
              "status": "passed",
              "duration": 48146712
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to only allow the clearnet and debian-tor users to connect directly to the Internet over IPv4",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 159389783
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall's NAT rules only redirect traffic for the Unsafe Browser, Tor's TransPort, and DNSPort",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:145"
            },
            "result": {
              "status": "passed",
              "duration": 35633615
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to block all external IPv6 traffic",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 50951767
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 608990141
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 27532
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-from-the-unsafe-browser-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks from the Unsafe Browser with the firewall leak detector",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12463
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3819079
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9356531922
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4487126
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 8097675019
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 7782483230
            }
          },
          {
            "keyword": "And ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 331149605
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 22,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 136885746
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1000023339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 57817113
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14768
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3274131
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21405529192
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4417205
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 27,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 173436854
            }
          },
          {
            "keyword": "When ",
            "name": "I do a TCP DNS lookup of \"torproject.org\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 181325901
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 29,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 193952618
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 780494746
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37591800
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-udp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting UDP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 22362
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4128847
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9779204939
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 4514808
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 34,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 125792610
            }
          },
          {
            "keyword": "When ",
            "name": "I do a UDP DNS lookup of \"torproject.org\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 143808808
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 36,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 121000180
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 968405332
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 47480669
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-icmp-leaks-of-ping-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting ICMP leaks of ping with the firewall leak detector",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 22161
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3260155
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 39,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9468227586
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3724532
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 41,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 110331206
            }
          },
          {
            "keyword": "When ",
            "name": "I send some ICMP pings",
            "line": 42,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4059988752
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 43,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 110871562
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 939650319
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 46809624
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-udp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified UDP connection attempts",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 45
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 22863
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 14642341
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 7335302
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9621145728
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified UDP connection to 1.2.3.4 on port 42",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 197943639
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 46177
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:299"
            },
            "result": {
              "status": "passed",
              "duration": 80209818
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 221325204
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 537545234
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 75833
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-icmp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified ICMP connection attempts",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11511
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2853566
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1823675
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9399033494
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified ICMP connection to 1.2.3.4",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 5321092643
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 41759
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:299"
            },
            "result": {
              "status": "passed",
              "duration": 77764355
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 218791914
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 717469910
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 100117
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-system-dns-is-always-set-up-to-use-tor's-dnsport",
        "keyword": "Scenario",
        "name": "The system DNS is always set up to use Tor's DNSPort",
        "description": "",
        "line": 59,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11232
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3281416
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 60,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6521152438
            }
          },
          {
            "keyword": "And ",
            "name": "the system DNS is using the local DNS resolver",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:310"
            },
            "result": {
              "status": "passed",
              "duration": 10768741
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 58006975
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 9900714235
            }
          },
          {
            "keyword": "Then ",
            "name": "the system DNS is still using the local DNS resolver",
            "line": 64,
            "match": {
              "location": "features/step_definitions/tor.rb:310"
            },
            "result": {
              "status": "passed",
              "duration": 5372007
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 781559722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21449
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_stream_isolation.feature",
    "id": "tor-stream-isolation-is-effective",
    "keyword": "Feature",
    "name": "Tor stream isolation is effective",
    "description": "  As a Tails user\n  I want my Tor streams to be sensibly isolated from each other to prevent identity correlation",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9147
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5349185
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3254574
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9320597313
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-security-check-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-security-check is using the Tails-specific SocksPort",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-security-check",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 43440890
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-security-check",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:385"
            },
            "result": {
              "status": "passed",
              "duration": 155040368
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-security-check is properly stream isolated after 10 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 10007576184
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 402014928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1214933586
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 120816
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9588
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3860455
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2550872
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9727544688
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;htpdate-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "htpdate is using the Tails-specific SocksPort",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 15
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of htpdate",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 55815870
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run htpdate",
            "line": 18,
            "match": {
              "location": "features/step_definitions/tor.rb:392"
            },
            "result": {
              "status": "passed",
              "duration": 1194792309
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that htpdate is properly stream isolated",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 9308194
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 286519085
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 905319960
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 80781
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2872300
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1919382
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 21789385440
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-upgrade-frontend-wrapper-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-upgrade-frontend-wrapper is using the Tails-specific SocksPort",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 21
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-upgrade-frontend-wrapper",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 49942906
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-upgrade-frontend-wrapper",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:399"
            },
            "result": {
              "status": "passed",
              "duration": 32127854568
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-upgrade-frontend-wrapper is properly stream isolated",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 6071984
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 276161527
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1379410557
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 97492
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11852
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3791999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2943754
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9683471472
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;the-tor-browser-is-using-the-web-browser-specific-socksport",
        "keyword": "Scenario",
        "name": "The Tor Browser is using the web browser-specific SocksPort",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:354"
            },
            "result": {
              "status": "passed",
              "duration": 44668059
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 9353141763
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 7124248468
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 31,
            "match": {
              "location": "features/step_definitions/browser.rb:611"
            },
            "result": {
              "status": "passed",
              "duration": 204543861
            }
          },
          {
            "keyword": "And ",
            "name": "I see that Tor Browser is properly stream isolated",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:366"
            },
            "result": {
              "status": "passed",
              "duration": 59592768
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 291480682
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1029242225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 285152
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_browsing.feature",
    "id": "browsing-the-web-using-the-tor-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Tor Browser",
    "description": "  As a Tails user\n  when I browse the web using the Tor Browser\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-cannot-access-the-lan",
        "keyword": "Scenario",
        "name": "The Tor Browser cannot access the LAN",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14797
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3892737
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9324825957
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1342"
            },
            "result": {
              "status": "passed",
              "duration": 1029866039
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 3463935
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 11,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 8972275941
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Tor Browser",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1411"
            },
            "result": {
              "status": "passed",
              "duration": 4207721169
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser shows the \"Unable to connect\" error",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:386"
            },
            "result": {
              "status": "passed",
              "duration": 129252130
            }
          },
          {
            "keyword": "And ",
            "name": "no traffic was sent to the web server on the LAN",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1415"
            },
            "result": {
              "status": "passed",
              "duration": 99930347
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 965315938
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 46868719
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-downloads-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Downloads directory is usable in Tor Browser",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 16
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14016
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5385273
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3333273
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9708171659
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 49781877
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14761007408
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7396594585
            }
          },
          {
            "keyword": "Then ",
            "name": "I can save the current page as \"index.html\" to the Downloads directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 4495389752
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Downloads directory",
            "line": 23,
            "match": {
              "location": "features/step_definitions/browser.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 3177303399
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 242456026
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 901850548
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 109104
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;downloading-files-with-the-tor-browser",
        "keyword": "Scenario",
        "name": "Downloading files with the Tor Browser",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 25
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8635
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3967736
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2610232
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 27,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9323049181
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 8768284252
            }
          },
          {
            "keyword": "When ",
            "name": "I download some file in the Tor Browser to the Downloads directory",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:348"
            },
            "result": {
              "status": "passed",
              "duration": 11649520554
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Downloads directory",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:369"
            },
            "result": {
              "status": "passed",
              "duration": 375676589
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 272789345
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 791007781
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 246048
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;playing-an-ogg-audio-track",
        "keyword": "Scenario",
        "name": "Playing an Ogg audio track",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 18474
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4523423
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 3475728
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9894172258
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 35,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 8274939588
            }
          },
          {
            "keyword": "Then ",
            "name": "I can listen to an Ogg audio track in Tor Browser",
            "line": 36,
            "match": {
              "location": "features/step_definitions/browser.rb:410"
            },
            "result": {
              "status": "passed",
              "duration": 37133595716
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 735725508
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 961417217
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2827999
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;watching-a-webm-video",
        "keyword": "Scenario",
        "name": "Watching a WebM video",
        "description": "",
        "line": 39,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 38
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14177
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3620499
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2855520
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 40,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9425445779
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 41,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7871650344
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video in Tor Browser",
            "line": 42,
            "match": {
              "location": "features/step_definitions/browser.rb:429"
            },
            "result": {
              "status": "passed",
              "duration": 7024143715
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 308707063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 546988924
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 95338
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;i-can-view-a-file-stored-in-\"~/downloads\"-but-not-in-~/.gnupg",
        "keyword": "Scenario",
        "name": "I can view a file stored in \"~/Downloads\" but not in ~/.gnupg",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12554
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3040044
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9514276834
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/Downloads/synaptic.html\" as user \"amnesia\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 51283892
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/.gnupg/synaptic.html\" as user \"amnesia\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 39276538
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/tmp/synaptic.html\" as user \"amnesia\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1068"
            },
            "result": {
              "status": "passed",
              "duration": 49004726
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 32543718
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 20981866
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 33765460
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/tmp/synaptic.html\" exists",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 31498147
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"torbrowser_firefox\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1431"
            },
            "result": {
              "status": "passed",
              "duration": 93990412
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7472149616
            }
          },
          {
            "keyword": "And ",
            "name": "I open the address \"file:///home/amnesia/Downloads/synaptic.html\" in the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 7316027943
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 353286137
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has not denied \"torbrowser_firefox\" from opening \"/home/amnesia/Downloads/synaptic.html\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 54653051
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 3955571802
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 297386067
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 60,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 3558851457
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 309790223
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 4133058375
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 292369915
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///tmp/synaptic.html\" in the Tor Browser",
            "line": 64,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 4180578591
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 320729313
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 597387830
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 26869
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-uses-tbb's-shared-libraries",
        "keyword": "Scenario",
        "name": "The Tor Browser uses TBB's shared libraries",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13987
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3069409
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 68,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9589188037
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 69,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 8365705279
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser uses all expected TBB shared libraries",
            "line": 70,
            "match": {
              "location": "features/step_definitions/browser.rb:312"
            },
            "result": {
              "status": "passed",
              "duration": 624330673
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 686041513
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 67496
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-\"new-identity\"-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's \"New identity\" feature works as expected",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 72
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 4146451
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5416762
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2970033
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 74,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9420077643
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 8197197792
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://example.com/\" in the Tor Browser",
            "line": 76,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 7232887370
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"Example Domain\" heading on the \"Example Domain\" page",
            "line": 77,
            "match": {
              "location": "features/step_definitions/browser.rb:398"
            },
            "result": {
              "status": "passed",
              "duration": 108531109
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 2 tabs open",
            "line": 78,
            "match": {
              "location": "features/step_definitions/browser.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 94034256
            }
          },
          {
            "keyword": "When ",
            "name": "I request a new identity in Tor Browser",
            "line": 79,
            "match": {
              "location": "features/step_definitions/browser.rb:674"
            },
            "result": {
              "status": "passed",
              "duration": 3182123763
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads about:tor",
            "line": 80,
            "match": {
              "location": "features/step_definitions/browser.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 1480482324
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 1 tab open",
            "line": 81,
            "match": {
              "location": "features/step_definitions/browser.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 83471779
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 231053483
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 991844150
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 94245
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-circuit-view-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's circuit view feature works as expected",
        "description": "",
        "line": 86,
        "type": "scenario",
        "comments": [
          {
            "value": "# If you think that the \"the Tor Browser loads the Tails homepage\" implies @doc, think",
            "line": 83
          },
          {
            "value": "# again: it depends on reaching the public website, not on using the copy of the",
            "line": 84
          },
          {
            "value": "# website which is bundled in.",
            "line": 85
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14938
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5185540
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 87,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9605356388
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 88,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7967598919
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 89,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 6741081414
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 90,
            "match": {
              "location": "features/step_definitions/browser.rb:611"
            },
            "result": {
              "status": "passed",
              "duration": 379684383
            }
          },
          {
            "keyword": "And ",
            "name": "Tor Browser's circuit view is working",
            "line": 91,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 1400355334
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 658652105
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20759
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;webrtc-is-disabled-in-tor-browser",
        "keyword": "Scenario",
        "name": "WebRTC is disabled in Tor Browser",
        "description": "",
        "line": 93,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9808
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3578861
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 94,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9783919364
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 95,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 8062620669
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://net.ipcalf.com/\" in the Tor Browser",
            "line": 96,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 7155844562
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a 'ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1' heading on the \"Network IP Address via ipcalf.com\" page",
            "line": 97,
            "match": {
              "location": "features/step_definitions/browser.rb:404"
            },
            "result": {
              "status": "passed",
              "duration": 120105337
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://mozilla.github.io/webrtc-landing/pc_test.html\" in the Tor Browser",
            "line": 98,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 6825454557
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"RTCPeerConnection is missing!\" heading on the \"Simple RTCPeerConnection Video Test\" page",
            "line": 99,
            "match": {
              "location": "features/step_definitions/browser.rb:398"
            },
            "result": {
              "status": "passed",
              "duration": 168292028
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 590293937
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22693
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-persistent-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Persistent directory is usable in Tor Browser",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8716
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3368448
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 102,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8455041650
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 29289436
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:680"
            },
            "result": {
              "status": "passed",
              "duration": 10028047655
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 1069564877
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 7742690513
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Persistent directory",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 16939905812
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 108,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 11088240469
            }
          },
          {
            "keyword": "And ",
            "name": "I download some file in the Tor Browser to the Persistent directory",
            "line": 109,
            "match": {
              "location": "features/step_definitions/browser.rb:348"
            },
            "result": {
              "status": "passed",
              "duration": 10976522278
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Persistent directory",
            "line": 110,
            "match": {
              "location": "features/step_definitions/browser.rb:369"
            },
            "result": {
              "status": "passed",
              "duration": 295490725
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://tails.net/about\" in the Tor Browser",
            "line": 111,
            "match": {
              "location": "features/step_definitions/browser.rb:213"
            },
            "result": {
              "status": "passed",
              "duration": 7386053554
            }
          },
          {
            "keyword": "Then ",
            "name": "\"Tails - How Tails works\" has loaded in the Tor Browser",
            "line": 112,
            "match": {
              "location": "features/step_definitions/browser.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 554107954
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Persistent directory",
            "line": 113,
            "match": {
              "location": "features/step_definitions/browser.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 9026798472
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 937821622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21961
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;2",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11422
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4177028
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 123,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7021319051
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 41920368
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14894543586
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 10885889016
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Documents GNOME bookmark",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 7183097940
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 683441766
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22763
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;3",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 124,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3536822
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7317294719
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 51985355
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 15265036550
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 10611502853
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Downloads GNOME bookmark",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 7164793737
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 907271339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22702
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;4",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 125,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11120
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4664177
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 125,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6943745224
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 45033839
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 15108414916
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 10988918341
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Music GNOME bookmark",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 7456289444
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 667414342
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20178
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;5",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9208
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4259263
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 126,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6688216025
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 40689460
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14804067958
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 10755938770
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Pictures GNOME bookmark",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 7017413119
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 926343641
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21200
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;6",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 127,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 8156
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3967557
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6720844568
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1319"
            },
            "result": {
              "status": "passed",
              "duration": 40757487
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1323"
            },
            "result": {
              "status": "passed",
              "duration": 14823697623
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 10787747887
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Videos GNOME bookmark",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:659"
            },
            "result": {
              "status": "passed",
              "duration": 6916872648
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 917255371
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 25366
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;persistent-browser-bookmarks",
        "keyword": "Scenario",
        "name": "Persistent browser bookmarks",
        "description": "",
        "line": 129,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9027
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6049032
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 130,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 8186551596
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:785"
            },
            "result": {
              "status": "passed",
              "duration": 7975593049
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 132,
            "match": {
              "location": "features/step_definitions/usb.rb:999"
            },
            "result": {
              "status": "passed",
              "duration": 178124009
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 133,
            "match": {
              "location": "features/step_definitions/usb.rb:1016"
            },
            "result": {
              "status": "passed",
              "duration": 325697032
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1044"
            },
            "result": {
              "status": "passed",
              "duration": 2044928337
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser in offline mode",
            "line": 135,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 13996816027
            }
          },
          {
            "keyword": "And ",
            "name": "I add a bookmark to eff.org in the Tor Browser",
            "line": 136,
            "match": {
              "location": "features/step_definitions/browser.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 8360958372
            }
          },
          {
            "keyword": "And ",
            "name": "I cold reboot the computer",
            "line": 137,
            "match": {
              "location": "features/step_definitions/common_steps.rb:282"
            },
            "result": {
              "status": "passed",
              "duration": 7364933420
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 35060656893
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:728"
            },
            "result": {
              "status": "passed",
              "duration": 13384512271
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 140,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 7737155279
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 141,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8503605188
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser in offline mode",
            "line": 142,
            "match": {
              "location": "features/step_definitions/browser.rb:502"
            },
            "result": {
              "status": "passed",
              "duration": 7879833015
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has a bookmark to eff.org",
            "line": 143,
            "match": {
              "location": "features/step_definitions/browser.rb:643"
            },
            "result": {
              "status": "passed",
              "duration": 798297994
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1009009328
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 60512166
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_git.feature",
    "id": "cloning-a-git-repository",
    "keyword": "Feature",
    "name": "Cloning a Git repository",
    "description": "  As a Tails user\n  when I clone a Git repository\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17223
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3917803
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 4367624
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9514698587
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-a-git-repository-anonymously-over-https",
        "keyword": "Scenario",
        "name": "Cloning a Git repository anonymously over HTTPS",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"https://github.com/intrigeri/Dist-Zilla-Plugin-LocaleMsgfmt.git\" in Console",
            "line": 11,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 5343543004
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"Dist-Zilla-Plugin-LocaleMsgfmt\" has been cloned successfully",
            "line": 12,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 132728106
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 269821994
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 924390144
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 116318
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16861
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5805207
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 4658026
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9554176324
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-git-repository-over-ssh",
        "keyword": "Scenario",
        "name": "Cloning git repository over SSH",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for a Git repository",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 164633399
            }
          },
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"ssh://gitolite3@lizard.tails.boum.org:3004/myprivatekeyispublic/testing.git\" in Console",
            "line": 16,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 8133690541
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"testing\" has been cloned successfully",
            "line": 17,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 202529879
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 323619577
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 893017685
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 83766
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_misc.feature",
    "id": "various-checks-for-torified-software",
    "keyword": "Feature",
    "name": "Various checks for torified software",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17363
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3803180
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2461996
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9632479828
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;wget(1)-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "wget(1) should work for HTTPS and go through Tor",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I wget \"https://example.com/\" to stdout",
            "line": 8,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 241225508
            }
          },
          {
            "keyword": "Then ",
            "name": "the wget command is successful",
            "line": 9,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 68528
            }
          },
          {
            "keyword": "And ",
            "name": "the wget standard output contains \"Example Domain\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 30196
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 251018562
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 586480867
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 89196
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15829
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 10310118
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 11197315
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9447075059
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;curl-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "curl should work for HTTPS and go through Tor",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I curl \"https://example.com/\" to stdout",
            "line": 13,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 226901887
            }
          },
          {
            "keyword": "Then ",
            "name": "the curl command is successful",
            "line": 14,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 53690
            }
          },
          {
            "keyword": "And ",
            "name": "the curl standard output contains \"Example Domain\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 25077
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 295593548
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 791796147
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 227845
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 34726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 13168884
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 5642224
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9626685893
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;transparent-proxying-through-tor",
        "keyword": "Scenario",
        "name": "Transparent proxying through Tor",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9596613900
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified TCP connection to 8.8.8.8 on port 53",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 227262090
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified TCP connection succeeds",
            "line": 20,
            "match": {
              "location": "features/step_definitions/tor.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 62196
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 250834568
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 990175448
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 110727
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/uefi_ca.feature",
    "id": "user-gets-actionable-info-about-uefi-ca-expiry",
    "keyword": "Feature",
    "name": "User gets actionable info about UEFI CA expiry",
    "description": "  As a Tails user\n  When I'm using a computer which has Secure Boot, but doesn't have the Microsoft 2023 CA\n  Then I get a notification telling me what to do",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-warned-about-uefi-ca-expiry",
        "keyword": "Scenario",
        "name": "I am warned about UEFI CA expiry",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11492
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3946739
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 7293378903
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with old UEFI CA",
            "line": 9,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 27895970
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11027583035
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8914394541
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 12,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 47747760
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Secure Boot Update Needed\" notification after at most 20 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 749568945
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Secure Boot documentation from the notification",
            "line": 14,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 14790099662
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1169741845
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 20979
            }
          }
        ]
      },
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-not-warned-if-the-uefi-ca-is-up-to-date",
        "keyword": "Scenario",
        "name": "I am not warned if the UEFI CA is up-to-date",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3306712
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6635506118
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with new UEFI CA",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 12829573
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11999002176
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8277000360
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 21,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 30936609
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until amnesia's tails-uefi-ca-notify-user.service has completed",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1997"
            },
            "result": {
              "status": "passed",
              "duration": 1080600141
            }
          },
          {
            "keyword": "And ",
            "name": "I don't see the \"Secure Boot Update Needed\" notification after at most 10 seconds",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 10788203114
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1395158277
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22862
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/unsafe_browser.feature",
    "id": "browsing-the-web-using-the-unsafe-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Unsafe Browser",
    "description": "  As a Tails user\n  when I browse the web using the Unsafe Browser\n  I should have direct access to the web",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-be-disabled",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can be disabled",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3905440
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6510975830
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the Unsafe Browser",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:587"
            },
            "result": {
              "status": "passed",
              "duration": 7910701525
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 11531878239
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 23968860
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8382115466
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 64783215
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser complains that it is disabled",
            "line": 14,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 1154154318
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 652570583
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19957
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-access-the-lan",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can access the LAN",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16711
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4512847
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9792692482
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1342"
            },
            "result": {
              "status": "passed",
              "duration": 1028320114
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7892969593
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1411"
            },
            "result": {
              "status": "passed",
              "duration": 4042774164
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser displays the LAN web server hello message",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 213803472
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 751542022
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 488331
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-the-unsafe-browser-works-as-it-should",
        "keyword": "Scenario",
        "name": "Starting the Unsafe Browser works as it should",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 9829
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2937024
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9496675960
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 26,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 8407497337
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser runs as the expected user",
            "line": 27,
            "match": {
              "location": "features/step_definitions/browser.rb:334"
            },
            "result": {
              "status": "passed",
              "duration": 365684488
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has a red theme",
            "line": 28,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 486090237
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser shows a warning as its start page",
            "line": 29,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 391127402
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no add-ons installed",
            "line": 30,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4234220101
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no bookmarks",
            "line": 31,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 4086406029
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser uses all expected TBB shared libraries",
            "line": 32,
            "match": {
              "location": "features/step_definitions/browser.rb:312"
            },
            "result": {
              "status": "passed",
              "duration": 484916697
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 758752284
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 22482
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-load-a-web-page-from-the-internet",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can load a web page from the Internet",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 34
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16901
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4041475
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9729239889
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 37,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7914414924
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 38,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 7881405082
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 39,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 314245188
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has sent packets out to the Internet",
            "line": 40,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 52831908
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1106750629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23064
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;closing-the-unsafe-browser-shows-a-stop-notification-and-properly-tears-down-the-chroot",
        "keyword": "Scenario",
        "name": "Closing the Unsafe Browser shows a stop notification and properly tears down the chroot",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12234
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3904090
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 44,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9727397826
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 8044423328
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 121122776
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Shutting down the Unsafe Browser...\" notification after at most 60 seconds",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:631"
            },
            "result": {
              "status": "passed",
              "duration": 1252395553
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser chroot is torn down",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 77950406
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 993328540
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 27572
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-a-second-instance-of-the-unsafe-browser-results-in-an-error-message-being-shown",
        "keyword": "Scenario",
        "name": "Starting a second instance of the Unsafe Browser results in an error message being shown",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 50
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3554977
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9733426410
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 8527075842
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 58,
            "comments": [
              {
                "value": "# Wait for whatever facility the GNOME Activities Overview uses to",
                "line": 54
              },
              {
                "value": "# learn about which applications are running to \"settle\". Without",
                "line": 55
              },
              {
                "value": "# this sleep, it is confused and it's impossible to start a new",
                "line": 56
              },
              {
                "value": "# instance (it will just switch to the one we already started).",
                "line": 57
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 10000203025
            }
          },
          {
            "keyword": "And ",
            "name": "I try to start the Unsafe Browser",
            "line": 59,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 48789458
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a warning about another instance already running",
            "line": 60,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:68"
            },
            "result": {
              "status": "passed",
              "duration": 1185989527
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1120385262
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21090
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-is-not-allowed-to-use-a-local-proxy",
        "keyword": "Scenario",
        "name": "The Unsafe Browser is not allowed to use a local proxy",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13715
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5124558
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9585287792
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the Unsafe Browser to use a local proxy",
            "line": 64,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 103897696
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 65,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 8213584104
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 66,
            "match": {
              "location": "features/step_definitions/browser.rb:374"
            },
            "result": {
              "status": "passed",
              "duration": 4029509688
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser shows the \"The proxy server is refusing connections\" error",
            "line": 67,
            "match": {
              "location": "features/step_definitions/browser.rb:386"
            },
            "result": {
              "status": "passed",
              "duration": 160958639
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 713048255
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 23253
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-only-makes-user-initiated-non-torified-connections",
        "keyword": "Scenario",
        "name": "The Unsafe Browser only makes user-initiated non-Torified connections",
        "description": "",
        "line": 70,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 69
          },
          {
            "name": "@check_tor_leaks",
            "line": 69
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3401260
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 2396034
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9596886386
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5265362
            }
          },
          {
            "keyword": "And ",
            "name": "I configure the Unsafe Browser to check for updates more frequently",
            "line": 73,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 21545098
            }
          },
          {
            "keyword": "But ",
            "name": "checking for updates is disabled in the Unsafe Browser's configuration",
            "line": 74,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:125"
            },
            "result": {
              "status": "passed",
              "duration": 8944452
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 7322520315
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 120 seconds",
            "line": 76,
            "output": [
              "Slept for 120 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 120000157387
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser has not sent packets out to the Internet",
            "line": 77,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 340730914
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 251537486
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 689508434
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 66177811
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-cannot-be-started-when-i-am-offline",
        "keyword": "Scenario",
        "name": "The Unsafe Browser cannot be started when I am offline",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 79
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14948
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3693636
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 81,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 9474015666
            }
          },
          {
            "keyword": "And ",
            "name": "the network is unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:154"
            },
            "result": {
              "status": "passed",
              "duration": 31529684
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 84,
            "comments": [
              {
                "value": "# NetworkManager apparently needs some time to notice that the connection is now off",
                "line": 83
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1421"
            },
            "result": {
              "status": "passed",
              "duration": 10000176258
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 85,
            "match": {
              "location": "features/step_definitions/browser.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 87273733
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told I cannot start the Unsafe Browser when I am offline",
            "line": 86,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 4225650134
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1151014778
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18826
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/veracrypt.feature",
    "id": "using-veracrypt-encrypted-volumes",
    "keyword": "Feature",
    "name": "Using VeraCrypt encrypted volumes",
    "description": "  In order to collaborate with non-Tails users\n  As a Tails user\n  I want to unlock VeraCrypt encrypted volumes",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10890
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3386463
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6617431499
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a basic VeraCrypt volume",
        "description": "",
        "line": 12,
        "type": "scenario",
        "comments": [
          {
            "value": "### Unlock VeraCrypt Volumes",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume",
            "line": 13,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 9656798379
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1476146446
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 15,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 4620486380
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1694951491
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 17,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 299296546
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 18,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1224575833
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 19,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 89251333
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1015500110
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 975392
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 24166
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5768841
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6437295316
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 22,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17560040146
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1488190499
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 24,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 5495666510
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 25,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1976605024
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 26,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 183151144
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 27,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1338971429
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 28,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 80246947
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 650594148
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 380740
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3483595
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6469850669
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 31,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8168330234
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 32,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 6553691799
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 33,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1807853123
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 34,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 337630669
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 35,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1268467014
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 36,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 104198801
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 945150915
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 1788700
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13595
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 6198804
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6506915394
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 39,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 24646968328
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 40,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 8245226270
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 41,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 2022273020
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 42,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 292054905
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 43,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1252621536
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 44,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 98147521
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 640872634
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10628878
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 15869
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3864135
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6416447051
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a basic VeraCrypt volume with a keyfile",
        "description": "",
        "line": 48,
        "type": "scenario",
        "comments": [
          {
            "value": "### GNOME Disks",
            "line": 46
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume with a keyfile",
            "line": 49,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17367728224
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1641537116
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 51,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 9397382751
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 52,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 2204878750
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 53,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 110662956
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 54,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1272213205
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 55,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 111711154
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 667914265
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 310980
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 12284
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3369582
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6519091882
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 58,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 17590663308
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:855"
            },
            "result": {
              "status": "passed",
              "duration": 1478209462
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 60,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 7871950972
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 61,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 2087509921
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 62,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 295986552
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 63,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1295070495
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 64,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 76612005
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 987080350
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 360484
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10500
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4341084
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6375245354
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a keyfile",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a keyfile",
            "line": 67,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 24536601817
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 68,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 19109508802
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 69,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 2295101199
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 70,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 155325520
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 71,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1248104293
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 72,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 104350018
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 929869591
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9697006
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 17392
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4376743
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6554616754
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 74,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 75,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 24893354493
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 76,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 16879759206
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 77,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1850427782
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 78,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 109134899
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 79,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1259423361
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 161341602
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 1100731627
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9625925
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13876
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 4073255
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6419053693
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 83,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8391619325
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 84,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 15782246665
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 85,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1920659853
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 86,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 119410996
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 87,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1281023035
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 88,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 95599566
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 681539630
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 533055
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/webtunnel.feature",
    "id": "using-webtunnel-tor-bridges",
    "keyword": "Feature",
    "name": "Using WebTunnel Tor bridges",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using WebTunnel bridges\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 13525
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3424654
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6646741
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 87499591
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:201"
            },
            "result": {
              "status": "passed",
              "duration": 24285
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 643287576
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 33219114122
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 140136806
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6159385419
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8172659841
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 19513095
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4126322857
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;configuring-webtunnel-with-qr-code",
        "keyword": "Scenario",
        "name": "Configuring WebTunnel with QR code",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 19
          },
          {
            "name": "@check_tor_leaks",
            "line": 19
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 32452320247
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:710"
            },
            "result": {
              "status": "passed",
              "duration": 1865826549
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:763"
            },
            "result": {
              "status": "passed",
              "duration": 3186649361
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:535"
            },
            "result": {
              "status": "passed",
              "duration": 380448972
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 837642051
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 52461805
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 16121
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3605091
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 120446096
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:201"
            },
            "result": {
              "status": "passed",
              "duration": 28904
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:205"
            },
            "result": {
              "status": "passed",
              "duration": 694550821
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:405"
            },
            "result": {
              "status": "passed",
              "duration": 30242332080
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 137993806
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:516"
            },
            "result": {
              "status": "passed",
              "duration": 6254296617
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:767"
            },
            "result": {
              "status": "passed",
              "duration": 8258273882
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 25431965
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:409"
            },
            "result": {
              "status": "passed",
              "duration": 4666268350
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;typing-webtunnel-pluggable-transports-directly",
        "keyword": "Scenario",
        "name": "Typing WebTunnel pluggable transports directly",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:655"
            },
            "result": {
              "status": "passed",
              "duration": 4175853818
            }
          },
          {
            "keyword": "Then ",
            "name": "I can click the \"Connect to Tor\" button",
            "line": 31,
            "comments": [
              {
                "value": "# We could actually click to Connect to Tor, which would exercise a slightly different code path, but:",
                "line": 27
              },
              {
                "value": "#  - this would use the real tor network, on which we expect more problems, so let's avoid",
                "line": 28
              },
              {
                "value": "#  - \"Configuring WebTunnel with QR code\" is already testing webtunnel bridges",
                "line": 29
              },
              {
                "value": "# So let's not",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:965"
            },
            "result": {
              "status": "passed",
              "duration": 133194736
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 951418571
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7069140
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/whisperback.feature",
    "id": "i-can-report-a-bug-with-whisperback",
    "keyword": "Feature",
    "name": "I can report a bug with WhisperBack",
    "description": "  As a Tails user\n  When I experience a bug in Tails\n  I want to send a complete bug report to the Tails team",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "i-can-report-a-bug-with-whisperback;the-amnesia-user-cannot-run-tails-debugging-info-as-root",
        "keyword": "Scenario",
        "name": "The amnesia user cannot run tails-debugging-info as root",
        "description": "",
        "line": 8,
        "type": "scenario",
        "comments": [
          {
            "value": "# Anti-test: tails-debugging-info is not available to amnesia",
            "line": 7
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 14637
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 2993408
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6520940199
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"sudo /usr/local/sbin/tails-debugging-info\" as user \"amnesia\" fails",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1848"
            },
            "result": {
              "status": "passed",
              "duration": 69956170
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 622040389
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 19896
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;all-debugging-information-can-be-retrieved",
        "keyword": "Scenario",
        "name": "All debugging information can be retrieved",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 11472
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 5075998
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6474895657
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"/usr/local/sbin/tails-debugging-info --strict\" as user \"root\" succeeds",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1843"
            },
            "result": {
              "status": "passed",
              "duration": 706484650
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 567831513
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 18745
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;whisperback-has-access-to-debugging-information",
        "keyword": "Scenario",
        "name": "WhisperBack has access to debugging information",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 10850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:281"
            },
            "result": {
              "status": "passed",
              "duration": 3796158
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 6435710683
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"WhisperBack\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1216"
            },
            "result": {
              "status": "passed",
              "duration": 8493269445
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack has debugging information",
            "line": 19,
            "match": {
              "location": "features/step_definitions/whisperback.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 2238405442
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:339"
            },
            "result": {
              "status": "passed",
              "duration": 819239000
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21259
            }
          }
        ]
      }
    ]
  }
]