[
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 69771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 37792967
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 481394610
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"swap\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 34850849
            }
          },
          {
            "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": 5709271558
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"swap\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1017214967
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"live_hd\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 8851924
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"live_hd\"",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 13936395987
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"live_hd\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1020847919
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails with network unplugged and I login",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 52482794782
            }
          },
          {
            "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": 75060600
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is detected by Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 70189356
            }
          },
          {
            "keyword": "But ",
            "name": "Tails has no disk swap enabled",
            "line": 17,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 61484559
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is not mounted",
            "line": 18,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 57570062
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 693343125
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 105528234
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18014
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1791327
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 73596439
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 11291037
            }
          },
          {
            "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": 19689145084
            }
          },
          {
            "keyword": "And ",
            "name": "I plug non-removable USB drive \"fake_TailsData\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1024697885
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 935410930
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 34750036633
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 318889695
            }
          },
          {
            "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": 13243362263
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1025858647
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9799445
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17053
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1898759
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 59429377
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10178508
            }
          },
          {
            "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": 16446004668
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"fake_TailsData\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1019511024
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 860280433
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 36196959153
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 389631156
            }
          },
          {
            "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": 13344859280
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1288019450
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7373668
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13205
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1475372
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 71567047
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"gpt_ext2\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 11099778
            }
          },
          {
            "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": 3075093964
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"gpt_ext2\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1055126012
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"msdos_fat32\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12327165
            }
          },
          {
            "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": 3349106385
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"msdos_fat32\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1031128256
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 54582703254
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"gpt_ext2\" is detected by Tails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 149594566
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"gpt_ext2\" is not mounted",
            "line": 50,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 55268140
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is detected by Tails",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 67275373
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is not mounted",
            "line": 52,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 62377530
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 759814085
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7390399
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 67227
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 7664793
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 88432744490
            }
          },
          {
            "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": 83356895
            }
          },
          {
            "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": 108481939
            }
          },
          {
            "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": 6173139233
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1092006784
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5959519
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 23474
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4088011
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 40720683842
            }
          },
          {
            "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": 147443168
            }
          },
          {
            "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": 250803273
            }
          },
          {
            "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": 18829215192
            }
          },
          {
            "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": 29514508631
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1254149399
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24366
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16671
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2058939
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3091019
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6972427284
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25822557
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 42712754034
            }
          },
          {
            "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": 38308461
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 272842193
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 907331600
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 95069
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13756
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2143908
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1467988
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7799711564
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 30641724
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2394701402
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 12540559519
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1273962855
            }
          },
          {
            "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": 41224149
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 147826840
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1011857880
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 158217
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17664
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4755036
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 9095832
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6989256799
            }
          },
          {
            "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": 251828463
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2246441
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 26480642
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2450807062
            }
          },
          {
            "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 14062169200
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1509201382
            }
          },
          {
            "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": 71257268
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 306765713
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 174740938
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 981570927
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 55728316
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11411
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3339476
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3104764
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6825526752
            }
          },
          {
            "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": 242614628
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 6989345
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 66139893072
            }
          },
          {
            "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": 574856821
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 85604722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 933789790
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32648004
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19005
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2053790
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1804230
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6967311721
            }
          },
          {
            "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": 1967775305
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 5046894
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 62654190383
            }
          },
          {
            "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": 1340389505
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 90671934
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1097181950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6828393
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 24045
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2899268
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3041466
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 60612425
            }
          },
          {
            "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:173"
            },
            "result": {
              "status": "passed",
              "duration": 9175404
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 825875789
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 35589380387
            }
          },
          {
            "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": 417220770
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 97254275
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 716887827
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21587228
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11662
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1088646
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2728207
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7154458688
            }
          },
          {
            "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": 1087353353
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13486194
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 19450052949
            }
          },
          {
            "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": 41384482
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 203829505
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 835495301
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 750971
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13906
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1913116
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1381656
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6871445248
            }
          },
          {
            "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": 170925792
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 3897231839
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4591659
            }
          },
          {
            "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": 71058366
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17153705
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2907169358
            }
          },
          {
            "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 4619741423
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1259646426
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:423"
            },
            "result": {
              "status": "passed",
              "duration": 15108600284
            }
          },
          {
            "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:931"
            },
            "result": {
              "status": "passed",
              "duration": 15414898110
            }
          },
          {
            "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": 451046639
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1123701235
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 6534875711
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 319573198
            }
          },
          {
            "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": 55771659
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 225960286
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1020382253
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 38194756
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 23154
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3292308
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2603433
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7118276537
            }
          },
          {
            "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": 208745294
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 4059188899
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2149169
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15964633
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 88,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2860953459
            }
          },
          {
            "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 4258888024
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 91,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1215953651
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 11496346623
            }
          },
          {
            "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:931"
            },
            "result": {
              "status": "passed",
              "duration": 15105855382
            }
          },
          {
            "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": 393287738
            }
          },
          {
            "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": 265834861
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1119846855
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 6320548968
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 100,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 269330851
            }
          },
          {
            "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": 51561978
            }
          },
          {
            "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": 338199523
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 215829306
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1104590175
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 59390539
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12453
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1884751
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2396933
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 106,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6880989651
            }
          },
          {
            "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": 1076862557
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20749002
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 39064814308
            }
          },
          {
            "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": 143479
            }
          },
          {
            "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": 500547767
            }
          },
          {
            "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": 193664
            }
          },
          {
            "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": 2875865
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 284601750
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 922836084
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 1101931
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 20138
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3148557
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7002258282
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 41004828
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 75623015
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2910736055
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 12212593920
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1202281605
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 7225098
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 2155992854
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 368414757
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 764123293
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 42255420
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16130
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2090058
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7273270740
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 13867611
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 54976536
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2647954757
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 10730499688
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1630997574
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 7105173
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 2157890312
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 359527324
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 917030096
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44700212
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12835
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2910550
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6755219817
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3521437
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19479478
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2497522861
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 28102424920
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1270812906
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 30,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 5320879
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 2145452962
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 295159501
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 707134779
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47346075
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19405
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3796956
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6888408154
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3128669
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17281737
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2415938305
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 12357294805
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1147529867
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 368474079
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 5478426
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 1081846071
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 386371933
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 360762598
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 692592934
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54479020
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15830
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2519786
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6879585049
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2551306
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 22012807
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2600810921
            }
          }
        ]
      },
      {
        "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:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1264250405
            }
          },
          {
            "keyword": "When ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 20002163268
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1492752150
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 13960865
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 1080039967
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 385259043
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 308648342
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 747339917
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53450026
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 24435
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3100457
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6984931591
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3112189
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20554176
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2757820467
            }
          }
        ]
      },
      {
        "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:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1236328355
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure a direct connection in the Tor Connection Assistant",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:750"
            },
            "result": {
              "status": "passed",
              "duration": 29628241783
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 132827118
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf is empty",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:1149"
            },
            "result": {
              "status": "passed",
              "duration": 438462146
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1262227738
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1131313004
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 5378129628
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 6097198
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 2142548870
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 426409045
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 884659307
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 55089538
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 8696
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1743798
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7047218449
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3225963
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18565008
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2778103237
            }
          }
        ]
      },
      {
        "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:762"
            },
            "result": {
              "status": "passed",
              "duration": 4226233787
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant complains that normal bridges are not allowed",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:900"
            },
            "result": {
              "status": "passed",
              "duration": 201892128
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot click the \"Connect to Tor\" button",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:926"
            },
            "result": {
              "status": "passed",
              "duration": 204870546
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 725610805
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 59215640
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19345
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 9976689
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6976219186
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2241152
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 28603574
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2710043337
            }
          }
        ]
      },
      {
        "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:513"
            },
            "result": {
              "status": "passed",
              "duration": 6246843357
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1860183675
            }
          },
          {
            "keyword": "When ",
            "name": "I disconnect the network through GNOME",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 11102011895
            }
          },
          {
            "keyword": "And ",
            "name": "I connect the network through GNOME",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10854329416
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 75869999
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant connects to Tor",
            "line": 77,
            "match": {
              "location": "features/step_definitions/tor.rb:391"
            },
            "result": {
              "status": "passed",
              "duration": 232566013
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1208718882
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is using the same configuration as before",
            "line": 79,
            "match": {
              "location": "features/step_definitions/tor.rb:1139"
            },
            "result": {
              "status": "passed",
              "duration": 48582
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 45661550
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 605393204
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 825340364
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 36660895
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10429
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3769895
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7162528598
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3111436
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 35383534
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2654476775
            }
          }
        ]
      },
      {
        "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:513"
            },
            "result": {
              "status": "passed",
              "duration": 5808836946
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1912152212
            }
          },
          {
            "keyword": "And ",
            "name": "I disconnect the network through GNOME",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10824393618
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are blocked",
            "line": 87,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1609601821
            }
          },
          {
            "keyword": "When ",
            "name": "I connect the network through GNOME",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10816735430
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 89,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 23167971820
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1061121357
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48973330
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2913475
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6869479422
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4435575
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 31157320
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2444560562
            }
          }
        ]
      },
      {
        "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:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1175941259
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure some default bridges in the Tor Connection Assistant",
            "line": 93,
            "match": {
              "location": "features/step_definitions/tor.rb:750"
            },
            "result": {
              "status": "passed",
              "duration": 21977688358
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 94,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 85607284
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 95,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1532720686
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 96,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1210504184
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 7172357836
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 747375036
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 402867985
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 858225739
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44911047
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 23343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3669728
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7105853506
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2862269
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17940374
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2723808718
            }
          }
        ]
      },
      {
        "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:784"
            },
            "result": {
              "status": "passed",
              "duration": 118719108
            }
          },
          {
            "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:816"
            },
            "result": {
              "status": "passed",
              "duration": 6263893508
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 7585962335
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 2132836973
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor is configured to use the default bridges",
            "line": 106,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 336304988
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 312416719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 684285228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58552172
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15649
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2575160
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7233014596
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 1987855
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 27193232
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 3068793006
            }
          }
        ]
      },
      {
        "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:804"
            },
            "result": {
              "status": "passed",
              "duration": 14622569
            }
          },
          {
            "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:816"
            },
            "result": {
              "status": "passed",
              "duration": 6042881395
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 112,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 81279362
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant reports the Moat API error",
            "line": 113,
            "match": {
              "location": "features/step_definitions/tor.rb:883"
            },
            "result": {
              "status": "passed",
              "duration": 3149431166
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1268830117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44767499
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16480
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2351749
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6862970657
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2725041
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23459254
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2572134864
            }
          }
        ]
      },
      {
        "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:1246"
            },
            "result": {
              "status": "passed",
              "duration": 8536712
            }
          },
          {
            "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:816"
            },
            "result": {
              "status": "passed",
              "duration": 6200498066
            }
          },
          {
            "keyword": "Then ",
            "name": "some real world bridges are eventually configured in torrc",
            "line": 118,
            "match": {
              "location": "features/step_definitions/tor.rb:1250"
            },
            "result": {
              "status": "passed",
              "duration": 1311320178
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 723661158
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 39093746
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15429
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2092111
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6999478306
            }
          },
          {
            "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": 405866962
            }
          },
          {
            "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": 1234092712
            }
          },
          {
            "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": 2249254513
            }
          },
          {
            "keyword": "When ",
            "name": "I kill the allocating process",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 335394340
            }
          },
          {
            "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 1534 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 6800324635
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 823209071
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22592
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12724
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2828906
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6901305202
            }
          },
          {
            "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": 538261703
            }
          },
          {
            "keyword": "And ",
            "name": "I find very few patterns in the guest's memory",
            "line": 25,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1535 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1964111612
            }
          },
          {
            "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": 1924249995
            }
          },
          {
            "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": 2267909888
            }
          },
          {
            "keyword": "When ",
            "name": "I umount \"/mnt\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 1445436849
            }
          },
          {
            "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 1535 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4769062800
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1184517222
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24907
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15710
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1657595
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6645115719
            }
          },
          {
            "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": 470528719
            }
          },
          {
            "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:1507"
            },
            "result": {
              "status": "passed",
              "duration": 6836418852
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 35,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1532 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 2244512853
            }
          },
          {
            "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": 3614166071
            }
          },
          {
            "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": 2064959634
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1545"
            },
            "result": {
              "status": "passed",
              "duration": 983020927
            }
          },
          {
            "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 1532 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5283615644
            }
          },
          {
            "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:1540"
            },
            "result": {
              "status": "passed",
              "duration": 239625530
            }
          },
          {
            "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": 513420163
            }
          },
          {
            "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": 2332034769
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1545"
            },
            "result": {
              "status": "passed",
              "duration": 493861807
            }
          },
          {
            "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 1532 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4842347966
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 799298863
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 571364
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1559442
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6825681671
            }
          },
          {
            "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": 515731175
            }
          },
          {
            "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:1507"
            },
            "result": {
              "status": "passed",
              "duration": 32807455077
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 52,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1533 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1748415063
            }
          },
          {
            "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": 1681311240
            }
          },
          {
            "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": 2104359333
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1545"
            },
            "result": {
              "status": "passed",
              "duration": 626867767
            }
          },
          {
            "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 1533 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5265106654
            }
          },
          {
            "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:1540"
            },
            "result": {
              "status": "passed",
              "duration": 6455834800
            }
          },
          {
            "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": 491513247
            }
          },
          {
            "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": 1883193263
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1545"
            },
            "result": {
              "status": "passed",
              "duration": 487311682
            }
          },
          {
            "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 1533 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4784892667
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 949730664
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 529936
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12303
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2741661
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 66,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7050460848
            }
          },
          {
            "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": 587828166
            }
          },
          {
            "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": 13497520284
            }
          },
          {
            "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": 2465136174
            }
          },
          {
            "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": 1611497860
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 72,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 23245033
            }
          },
          {
            "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 1536 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20555709323
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3795535712
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23273
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11171
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1762442
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 242876442402
            }
          },
          {
            "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": 318400744
            }
          },
          {
            "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": 11445844249
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 79,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 6953356
            }
          },
          {
            "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 1510 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 21098275228
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3609003684
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19111895
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 83136
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 13013756
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6889061619
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 4 GiB disk named \"gptfat\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 16714420
            }
          },
          {
            "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": 3205406734
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"gptfat\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2451412995
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails Installer",
            "line": 12,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 9974429788
            }
          },
          {
            "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:159"
            },
            "result": {
              "status": "passed",
              "duration": 34498861
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 761602501
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 1058189
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12223
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1992764
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6701814800
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12878112
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails Installer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 9871760376
            }
          },
          {
            "keyword": "But ",
            "name": "a suitable USB device is not found",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 15991662
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2717565856
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"temp\" USB drive is selected",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:171"
            },
            "result": {
              "status": "passed",
              "duration": 60181435
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"temp\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 140731429
            }
          },
          {
            "keyword": "Then ",
            "name": "a suitable USB device is not found",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 58077682
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 678833257
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 324120
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12194
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3449122
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7001656116
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 13173787
            }
          },
          {
            "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": 3306799944
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2366525623
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 30,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 104760589954
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 14576834708
            }
          },
          {
            "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": 2858012872
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 63592045
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1114204173
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 146153779
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16511
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3231272
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7133510340
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12491414
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2295339544
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 104078268380
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 13726517950
            }
          },
          {
            "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": 2744076124
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 51604698
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 968833818
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 119417957
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2316093
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8814319543
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 83210625
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 11844409
            }
          },
          {
            "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": 3162099368
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2305454742
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails with Persistent Storage to USB drive \"install\" by cloning",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 121668150213
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 19600630220
            }
          },
          {
            "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": 3518810018
            }
          },
          {
            "keyword": "And ",
            "name": "there is a persistence partition on USB drive \"install\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:592"
            },
            "result": {
              "status": "passed",
              "duration": 68884963
            }
          },
          {
            "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": 4033864038
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1402950487
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 124303028
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16551
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2987202
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8087997349
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10672946
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2251544297
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 113137411121
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 18148252598
            }
          },
          {
            "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": 2997104283
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 56573736
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 677831912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 147763195
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1998355
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7791926666
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7401727342
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"install\"",
            "line": 72,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 935545464
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2282323062
            }
          },
          {
            "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:186"
            },
            "result": {
              "status": "passed",
              "duration": 114624767164
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 14330862948
            }
          },
          {
            "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": 2877638100
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 67171813
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 726295500
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 169198088
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 78697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 15515117
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9331334152
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 358318284
            }
          },
          {
            "keyword": "And ",
            "name": "the computer is set to boot in UEFI mode",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 56679825
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 70467569821
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 314122018
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:930"
            },
            "result": {
              "status": "passed",
              "duration": 2741110380
            }
          },
          {
            "keyword": "And ",
            "name": "Tails has started in UEFI mode",
            "line": 88,
            "match": {
              "location": "features/step_definitions/usb.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 49887571
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1029221949
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22609269
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1922814
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 91,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7235522616
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a Tails USB image",
            "line": 92,
            "match": {
              "location": "features/step_definitions/usb.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 22643014948
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"usbimage\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 11128082
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"usbimage\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2334575765
            }
          },
          {
            "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:1533"
            },
            "result": {
              "status": "passed",
              "duration": 29943415952
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1537117490
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 172773527
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17735
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2570952
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78317259
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 62257037334
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"usbimage\"",
            "line": 101,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 317723446
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the system partition on \"usbimage\" is \"Tails\"",
            "line": 102,
            "match": {
              "location": "features/step_definitions/usb.rb:1434"
            },
            "result": {
              "status": "passed",
              "duration": 183133276
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" is an EFI system partition",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:1442"
            },
            "result": {
              "status": "passed",
              "duration": 182500476
            }
          },
          {
            "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:1451"
            },
            "result": {
              "status": "passed",
              "duration": 102176076
            }
          },
          {
            "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:1479"
            },
            "result": {
              "status": "passed",
              "duration": 50144234
            }
          },
          {
            "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:1496"
            },
            "result": {
              "status": "passed",
              "duration": 61352307
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" has the expected flags",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1513"
            },
            "result": {
              "status": "passed",
              "duration": 70261280
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 948411474
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27525517
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 32081
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2057287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3573906
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 85184060063
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 16,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 7702550833
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 17,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6310669941
            }
          },
          {
            "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": 6051555466
            }
          },
          {
            "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": 12675651558
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 8066156286
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1847885697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6327901
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12393
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6546433
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 8269661
            }
          }
        ],
        "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:261"
            },
            "result": {
              "status": "passed",
              "duration": 58034575645
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 29,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 5838242067
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 30,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6396144672
            }
          },
          {
            "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": 3180123447
            }
          },
          {
            "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": 23705115622
            }
          },
          {
            "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": 1075686762
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 9279045371
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 43058140329
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 17865997956
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10815919707
            }
          },
          {
            "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": 10214023465
            }
          },
          {
            "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": 1760461926
            }
          },
          {
            "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": 672056322
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"popularity-contest\" is installed after Additional Software has been started",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 94418558
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 7023749172
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 898266862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 14388619
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 22593
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6059067
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 9852855
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 92885688
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 74668124257
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 47,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 5689818923
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"ripgrep\" using apt",
            "line": 48,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6294995130
            }
          },
          {
            "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:140"
            },
            "result": {
              "status": "passed",
              "duration": 4193022234
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"ripgrep\" is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 63533176
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 8146042651
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 950349441
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29501291
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 106410
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 17073846
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 20697045
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 89707184
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 105933427090
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"popularity-contest\" using apt",
            "line": 56,
            "match": {
              "location": "features/step_definitions/apt.rb:99"
            },
            "result": {
              "status": "passed",
              "duration": 6264527722
            }
          },
          {
            "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": 2473474250
            }
          },
          {
            "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": 676746382
            }
          },
          {
            "keyword": "When ",
            "name": "I start Synaptic",
            "line": 59,
            "match": {
              "location": "features/step_definitions/apt.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 13123876005
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using Synaptic",
            "line": 60,
            "match": {
              "location": "features/step_definitions/apt.rb:146"
            },
            "result": {
              "status": "passed",
              "duration": 21803725332
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"cowsay\" using Synaptic",
            "line": 61,
            "match": {
              "location": "features/step_definitions/apt.rb:168"
            },
            "result": {
              "status": "passed",
              "duration": 9633266222
            }
          },
          {
            "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": 2475766628
            }
          },
          {
            "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": 783554977
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"cowsay\" using apt",
            "line": 64,
            "match": {
              "location": "features/step_definitions/apt.rb:99"
            },
            "result": {
              "status": "passed",
              "duration": 3248090984
            }
          },
          {
            "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": 2535008830
            }
          },
          {
            "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": 736899440
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 67,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9246052325
            }
          },
          {
            "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": 3964452164
            }
          },
          {
            "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": 1049304270
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"cowsay\" using apt",
            "line": 70,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 3307830180
            }
          },
          {
            "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": 1543370791
            }
          },
          {
            "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": 606039902
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 619073051
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 788984968
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9084457
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4679942
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 4117917
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 72840347
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 80850972943
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 80,
            "match": {
              "location": "features/step_definitions/apt.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 15004199
            }
          },
          {
            "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:116"
            },
            "result": {
              "status": "passed",
              "duration": 9080538361
            }
          },
          {
            "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": 5010186132
            }
          },
          {
            "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": 700970979
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 8308453268
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 39637977659
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 7334963801
            }
          },
          {
            "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:104"
            },
            "result": {
              "status": "passed",
              "duration": 12998582
            }
          },
          {
            "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:1640"
            },
            "result": {
              "status": "passed",
              "duration": 98761749
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10513618078
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been started",
            "line": 94,
            "match": {
              "location": "features/step_definitions/apt.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 10238360360
            }
          },
          {
            "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:122"
            },
            "result": {
              "status": "passed",
              "duration": 57301121
            }
          },
          {
            "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": 50253991
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16540307
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 13079901789
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 1096119654
            }
          },
          {
            "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:625"
            },
            "result": {
              "status": "passed",
              "duration": 547117321
            }
          },
          {
            "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:155"
            },
            "result": {
              "status": "passed",
              "duration": 2614326519
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 17624459455
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 38900672525
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6612625360
            }
          },
          {
            "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:104"
            },
            "result": {
              "status": "passed",
              "duration": 12744727
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 11464346825
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been started",
            "line": 111,
            "match": {
              "location": "features/step_definitions/apt.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 10566325936
            }
          },
          {
            "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:122"
            },
            "result": {
              "status": "passed",
              "duration": 55762382
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20207467
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 17572859291
            }
          },
          {
            "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": 62052572
            }
          },
          {
            "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:128"
            },
            "result": {
              "status": "passed",
              "duration": 70735155
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 794000772
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 894821195
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 15281384
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17683
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1812085
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1633931
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 121,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 50859311
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 122,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 39598607144
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6892274062
            }
          },
          {
            "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": 41270085
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10933481745
            }
          },
          {
            "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:625"
            },
            "result": {
              "status": "passed",
              "duration": 1742270993
            }
          },
          {
            "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:160"
            },
            "result": {
              "status": "passed",
              "duration": 6458195780
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"cowsay\" is not installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:923"
            },
            "result": {
              "status": "passed",
              "duration": 61514584
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 80645249
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 864103957
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 39074189
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 24386
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4668993
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 52589893
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"old\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9460445
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"old\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1021355900
            }
          },
          {
            "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:1743"
            },
            "result": {
              "status": "passed",
              "duration": 15001888056
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"old\" with network unplugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 59776405138
            }
          },
          {
            "keyword": "Then ",
            "name": "the boot device has safe access rights",
            "line": 26,
            "match": {
              "location": "features/step_definitions/usb.rb:930"
            },
            "result": {
              "status": "passed",
              "duration": 2893600444
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 268075411
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"old\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 41798669
            }
          },
          {
            "keyword": "And ",
            "name": "process \"udev-watchdog\" is running",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:843"
            },
            "result": {
              "status": "passed",
              "duration": 54070839
            }
          },
          {
            "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": 197214667
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"old\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 132268401
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1286311794
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7609598
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19216
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2198812
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 58823058
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 57099476761
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 272586224
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 26046378141
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1096"
            },
            "result": {
              "status": "passed",
              "duration": 779095418
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition exists on USB drive \"old\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:628"
            },
            "result": {
              "status": "passed",
              "duration": 644460105
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 8621943606
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 493552180
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5985678
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14107
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1686237
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 109147933
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 65985668745
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 298460753
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 48,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1156313447
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 49,
            "match": {
              "location": "features/step_definitions/usb.rb:1056"
            },
            "result": {
              "status": "passed",
              "duration": 1400087741
            }
          },
          {
            "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:973"
            },
            "result": {
              "status": "passed",
              "duration": 216673299
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 52,
            "match": {
              "location": "features/step_definitions/usb.rb:990"
            },
            "result": {
              "status": "passed",
              "duration": 446631120
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:1018"
            },
            "result": {
              "status": "passed",
              "duration": 2097651869
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 54,
            "match": {
              "location": "features/step_definitions/usb.rb:1096"
            },
            "result": {
              "status": "passed",
              "duration": 154306679
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 4415964212
            }
          },
          {
            "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?",
                "line": 56
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1135"
            },
            "result": {
              "status": "passed",
              "duration": 13454205239
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 578550297
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7843688
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 23513
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4748323
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9110002397
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 19893338544
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"old\" to a new USB drive \"to_upgrade\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 925581684
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"to_upgrade\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2230594543
            }
          },
          {
            "keyword": "When ",
            "name": "I upgrade Tails to USB drive \"to_upgrade\" by cloning",
            "line": 65,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 92598897738
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"to_upgrade\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/usb.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 17306676800
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"to_upgrade\"",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 186155923
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"__internal\"",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 161023937
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3271459143
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21380
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3696466
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 60358398
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 73501281022
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features from the old Tails version are active",
            "line": 74,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1023021050
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"to_upgrade\"",
            "line": 75,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 239099091
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:930"
            },
            "result": {
              "status": "passed",
              "duration": 2733880157
            }
          },
          {
            "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:1102"
            },
            "result": {
              "status": "passed",
              "duration": 1237157622
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:1018"
            },
            "result": {
              "status": "passed",
              "duration": 2303634332
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 733794425
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8084191
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 21389
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4677891
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8623110907
            }
          },
          {
            "keyword": "And ",
            "name": "no SquashFS delta is installed",
            "line": 83,
            "match": {
              "location": "features/step_definitions/usb.rb:1424"
            },
            "result": {
              "status": "passed",
              "duration": 69900651
            }
          },
          {
            "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:1421"
            },
            "result": {
              "status": "passed",
              "duration": 249637976
            }
          },
          {
            "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:1413"
            },
            "result": {
              "status": "passed",
              "duration": 40241398
            }
          },
          {
            "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:1272"
            },
            "result": {
              "status": "passed",
              "duration": 214201246
            }
          },
          {
            "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:1272"
            },
            "result": {
              "status": "passed",
              "duration": 350883408
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19220446
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 45493425012
            }
          },
          {
            "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:1308"
            },
            "result": {
              "status": "passed",
              "duration": 626439899
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.2~testoverlayfs",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:1327"
            },
            "result": {
              "status": "passed",
              "duration": 5925439158
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 19695332158
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 78737110860
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.2~testoverlayfs",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 14911049
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1271488976
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are present",
            "line": 96,
            "match": {
              "location": "features/step_definitions/usb.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 344639030
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.2~testoverlayfs SquashFS delta is installed",
            "line": 97,
            "match": {
              "location": "features/step_definitions/usb.rb:1424"
            },
            "result": {
              "status": "passed",
              "duration": 54884696
            }
          },
          {
            "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:1555"
            },
            "result": {
              "status": "passed",
              "duration": 149678344
            }
          },
          {
            "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:1421"
            },
            "result": {
              "status": "passed",
              "duration": 246039450
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14884310
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 20297854503
            }
          },
          {
            "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:1308"
            },
            "result": {
              "status": "passed",
              "duration": 462547737
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.3~testoverlayfs",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1327"
            },
            "result": {
              "status": "passed",
              "duration": 5162111587
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 17739398619
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 76371873270
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.3~testoverlayfs",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 6057652
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 111,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1374586478
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 408567365
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.3~testoverlayfs SquashFS delta is installed",
            "line": 113,
            "match": {
              "location": "features/step_definitions/usb.rb:1424"
            },
            "result": {
              "status": "passed",
              "duration": 67398661
            }
          },
          {
            "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:1555"
            },
            "result": {
              "status": "passed",
              "duration": 159196262
            }
          },
          {
            "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:1421"
            },
            "result": {
              "status": "passed",
              "duration": 283969088
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 118,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14466034
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 20564637478
            }
          },
          {
            "keyword": "Then ",
            "name": "the Upgrader considers the system as up-to-date",
            "line": 120,
            "match": {
              "location": "features/step_definitions/usb.rb:1394"
            },
            "result": {
              "status": "passed",
              "duration": 121950351
            }
          },
          {
            "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:109"
            },
            "result": {
              "status": "passed",
              "duration": 4907125357
            }
          },
          {
            "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:1272"
            },
            "result": {
              "status": "passed",
              "duration": 424011587
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1105222930
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13991152
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18344
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3218958
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7786185655
            }
          },
          {
            "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:1421"
            },
            "result": {
              "status": "passed",
              "duration": 272700413
            }
          },
          {
            "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:1413"
            },
            "result": {
              "status": "passed",
              "duration": 49869512
            }
          },
          {
            "keyword": "And ",
            "name": "the signing key used by the Upgrader is outdated",
            "line": 130,
            "match": {
              "location": "features/step_definitions/usb.rb:1407"
            },
            "result": {
              "status": "passed",
              "duration": 80065445
            }
          },
          {
            "keyword": "But ",
            "name": "a current signing key is available on our website",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:1418"
            },
            "result": {
              "status": "passed",
              "duration": 18624
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 132,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23224943
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 133,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 20298768812
            }
          },
          {
            "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:1308"
            },
            "result": {
              "status": "passed",
              "duration": 408500331
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 880482333
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22282
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 20228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5168934
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 39156109220
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 261149859
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:872"
            },
            "result": {
              "status": "passed",
              "duration": 12764835719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 195552293
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19807
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15710
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4517629
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7297952233
            }
          },
          {
            "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": 442947835
            }
          },
          {
            "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": 13561120398
            }
          },
          {
            "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": 2558521874
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 268374656
            }
          },
          {
            "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": 9032937517
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 23,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1533 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 579195254
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 4053323926
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21861
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18976
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4376593
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7261211743
            }
          },
          {
            "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": 478714687
            }
          },
          {
            "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:1507"
            },
            "result": {
              "status": "passed",
              "duration": 6586914993
            }
          },
          {
            "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": 2387301551
            }
          },
          {
            "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": 58113876
            }
          },
          {
            "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": 2476120977
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 284928444
            }
          },
          {
            "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": 9457182819
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 34,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1534 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 631288438
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3563392028
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 454524
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14437
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3077062
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 37,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6906342676
            }
          },
          {
            "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": 406632434
            }
          },
          {
            "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:1507"
            },
            "result": {
              "status": "passed",
              "duration": 32499691501
            }
          },
          {
            "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": 869531416
            }
          },
          {
            "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": 48843124
            }
          },
          {
            "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": 1973951914
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 235566517
            }
          },
          {
            "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": 12007507594
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 45,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1535 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 578243139
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3669049530
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 490392
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14788
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2644069
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8027777546
            }
          },
          {
            "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": 435859148
            }
          },
          {
            "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": 12887893067
            }
          },
          {
            "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": 2039877713
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1399"
            },
            "result": {
              "status": "passed",
              "duration": 338652211
            }
          },
          {
            "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": 11480543414
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 54,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1526 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 586941736
            }
          },
          {
            "keyword": "And ",
            "name": "Tails eventually shuts down",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:872"
            },
            "result": {
              "status": "passed",
              "duration": 89288509560
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 310736946
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22373
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19677
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3604033
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 122102470
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 36869020509
            }
          },
          {
            "keyword": "Then ",
            "name": "the only hosts in APT sources are \"cloudfront.debian.net,deb.tails.boum.org,deb.torproject.org\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 368314232
            }
          },
          {
            "keyword": "And ",
            "name": "no proposed-updates APT suite is enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/apt.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 67424421
            }
          },
          {
            "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": 49456087
            }
          },
          {
            "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": 116865650
            }
          },
          {
            "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": 9420623
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 665517908
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6850463
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15449
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3968919
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8886408935
            }
          },
          {
            "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:890"
            },
            "result": {
              "status": "passed",
              "duration": 8477987697
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"backup\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 894420655
            }
          },
          {
            "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8328610006
            }
          },
          {
            "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:1703"
            },
            "result": {
              "status": "passed",
              "duration": 8005294
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails' custom backup tool",
            "line": 14,
            "match": {
              "location": "features/step_definitions/backup.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 3200283165
            }
          },
          {
            "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": 202762696
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"backup\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2452216013
            }
          },
          {
            "keyword": "And ",
            "name": "I give the Persistent Storage on drive \"backup\" its own UUID",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:1686"
            },
            "result": {
              "status": "passed",
              "duration": 132166495
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Retry\" in the backup tool",
            "line": 18,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3193226966
            }
          },
          {
            "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": 132573628
            }
          },
          {
            "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": 3117729755
            }
          },
          {
            "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": 2464920297
            }
          },
          {
            "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": 16742051118
            }
          },
          {
            "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:120"
            },
            "result": {
              "status": "passed",
              "duration": 149963216
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"backup\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2743490418
            }
          },
          {
            "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": 3183461099
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1395422462
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 123086470
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17984
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 143479
            }
          }
        ],
        "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": 67926716
            }
          },
          {
            "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": 100753873
            }
          },
          {
            "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": 127479
            }
          },
          {
            "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": 73407
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 12,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 42799948
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 13,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 3875321
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1490060
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 15199
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14046
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 91321
            }
          }
        ],
        "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": 75842510
            }
          },
          {
            "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": 67908201
            }
          },
          {
            "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": 131357
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 19,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 75252
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 20,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 38261
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 21,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34205366
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 22,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 221906
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 23,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 82466
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 24,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 70323
            }
          },
          {
            "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": 217597
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1351711
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8776
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13064
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 114656
            }
          }
        ],
        "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": 40357990
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 29,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 13110547
            }
          },
          {
            "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": 130222920
            }
          },
          {
            "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": 97584
            }
          },
          {
            "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": 238419
            }
          },
          {
            "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": 988395692
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9318352
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 35,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 44653
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 36,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6480628
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 37,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 61225
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 79863717
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 39,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 264086
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 2288359
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8857
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19366
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 158659
            }
          }
        ],
        "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": 76720531
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 43,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 21090012
            }
          },
          {
            "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": 106537513
            }
          },
          {
            "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": 58560
            }
          },
          {
            "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": 120887
            }
          },
          {
            "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": 973821457
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 67276354
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 49,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 145082
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 55980847
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 51,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 112902
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 60434836
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 53,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 141715
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1599546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7614
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 141205
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 56,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 45549204
            }
          },
          {
            "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": 24792229
            }
          },
          {
            "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": 2046225
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 59,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2121616
            }
          },
          {
            "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": 183495
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 61,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 57020701
            }
          },
          {
            "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": 176582
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1051045
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7083
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11642
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 71004
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 65,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 29818935
            }
          },
          {
            "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": 30832880
            }
          },
          {
            "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": 6509953
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 68,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2643749
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 69,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 61525
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 70,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 32812240
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 71,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 25057
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1011260
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6873
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11832
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 65142
            }
          }
        ],
        "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": 22050136
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 75,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9536020
            }
          },
          {
            "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": 25609865
            }
          },
          {
            "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": 90551
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 78,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2880493
            }
          },
          {
            "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": 968621738
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 37920018
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 81,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 180138
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 21267785
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 83,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 36528
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 66892542
            }
          },
          {
            "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": 206147
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1292849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8946
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14719
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 101751
            }
          }
        ],
        "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": 38605286
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 89,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 25015358
            }
          },
          {
            "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": 31025072
            }
          },
          {
            "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": 815593
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 92,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 7776964
            }
          },
          {
            "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": 990775151
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 69006134
            }
          },
          {
            "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": 188625
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 96,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 64456223
            }
          },
          {
            "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": 165932
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 69719415
            }
          },
          {
            "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": 172253
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 3836760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13035
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 34133
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 181410
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 102,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 59416183
            }
          },
          {
            "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": 70645415
            }
          },
          {
            "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": 132660
            }
          },
          {
            "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": 14375744
            }
          },
          {
            "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": 56416
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 107,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48715194
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 108,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 238307
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1530406
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11371
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17273
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 108564
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 111,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 41273139
            }
          },
          {
            "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": 73255379
            }
          },
          {
            "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": 130074
            }
          },
          {
            "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": 12236666
            }
          },
          {
            "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": 121539
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 116,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 170111
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 117,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47409792
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 118,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 232878
            }
          },
          {
            "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": 131378
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 120,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 92003
            }
          },
          {
            "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": 118974
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1691338
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11211
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 24015
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 104387
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 124,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 51645731
            }
          },
          {
            "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": 96690948
            }
          },
          {
            "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": 133099
            }
          },
          {
            "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": 26802636
            }
          },
          {
            "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": 134031
            }
          },
          {
            "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": 1009793855
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 130,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 31840493
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 131,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 45966
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 132,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 15793650
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 133,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 86903
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 134,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 64859933
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 135,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 177313
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1393529
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9277
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12734
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 87034
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 138,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 55194720
            }
          },
          {
            "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": 73389492
            }
          },
          {
            "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": 45726
            }
          },
          {
            "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": 16056702
            }
          },
          {
            "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": 70773
            }
          },
          {
            "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": 982262405
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 144,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 62185167
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 145,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 161063
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 146,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 85149181
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 147,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 249549
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 148,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 69449898
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 149,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 148900
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 6063675
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7745
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13064
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 88287
            }
          }
        ],
        "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": 64772379
            }
          },
          {
            "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": 68460228
            }
          },
          {
            "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": 50466
            }
          },
          {
            "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": 82334
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 156,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 41222524
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 157,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 209483
            }
          },
          {
            "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": 96942
            }
          },
          {
            "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": 68048
            }
          },
          {
            "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": 66946
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 984899
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6472
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14477
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 95860
            }
          }
        ],
        "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": 38260949
            }
          },
          {
            "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": 70392779
            }
          },
          {
            "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": 39584
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 166,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 112371
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 167,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 40827
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 168,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 36582895
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 169,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 154681
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 170,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 63539
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 171,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 65353
            }
          },
          {
            "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": 76474
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1216878
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6282
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11963
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 117050
            }
          }
        ],
        "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": 55082029
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 176,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 24405171
            }
          },
          {
            "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": 102780502
            }
          },
          {
            "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": 51437
            }
          },
          {
            "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": 194546
            }
          },
          {
            "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": 978154138
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 13467838
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 182,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 48823
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 183,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12222617
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 184,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22272
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 185,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 36129935
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 186,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 130726
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1469823
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6683
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11672
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 90400
            }
          }
        ],
        "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": 42191373
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 190,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 31345023
            }
          },
          {
            "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": 103157020
            }
          },
          {
            "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": 64221
            }
          },
          {
            "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": 179297
            }
          },
          {
            "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": 971572768
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 195,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37089457
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 196,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 210745
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 197,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34827728
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 198,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 153980
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 199,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34472169
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 200,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 169980
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1412455
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8866
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13716
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 105698
            }
          }
        ],
        "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": 36347674
            }
          },
          {
            "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": 68448185
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 205,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 22951340
            }
          },
          {
            "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": 50134
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 207,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2857760
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 208,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 63663065
            }
          },
          {
            "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": 219672
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1102831
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8857
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12354
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 78407
            }
          }
        ],
        "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": 33952151
            }
          },
          {
            "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": 74439625
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 214,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 34907526
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 215,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 79710
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 216,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 6780742
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 217,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 42573262
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 218,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 32160
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1150962
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6151
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12694
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 70904
            }
          }
        ],
        "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": 26389681
            }
          },
          {
            "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": 64821571
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 223,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 17001919
            }
          },
          {
            "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": 70663
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 225,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2057246
            }
          },
          {
            "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": 970880588
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 227,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9037403
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 228,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 37130
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 229,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8550858
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 230,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 34695
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 231,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 60370005
            }
          },
          {
            "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": 164929
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1551886
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8025
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15008
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 87295
            }
          }
        ],
        "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": 52057574
            }
          },
          {
            "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": 74364804
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 237,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 33522724
            }
          },
          {
            "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": 71224
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 239,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 4915036
            }
          },
          {
            "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": 964279825
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 241,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 62606659
            }
          },
          {
            "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": 198063
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 243,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 61799814
            }
          },
          {
            "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": 171172
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 245,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 67436204
            }
          },
          {
            "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": 190168
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1485001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5831
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12423
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 89008
            }
          }
        ],
        "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": 53150207
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 250,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 35907507
            }
          },
          {
            "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": 72768814
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 252,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4681409
            }
          },
          {
            "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": 181461
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 254,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3155941
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 255,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 69375418
            }
          },
          {
            "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": 251232
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1154290
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6702
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14737
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 106802
            }
          }
        ],
        "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": 38730702
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 260,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 28414918
            }
          },
          {
            "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": 75741010
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 262,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 6230588
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 263,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 160691
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 264,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3912662
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 265,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 42123849
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 266,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 49422
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1743587
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10249
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18875
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 210255
            }
          }
        ],
        "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": 60434657
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 270,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 41906270
            }
          },
          {
            "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": 107466467
            }
          },
          {
            "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": 58639
            }
          },
          {
            "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": 12361079
            }
          },
          {
            "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": 255280
            }
          },
          {
            "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": 972297572
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 276,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11495803
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 277,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 61175
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 278,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 11020037
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 279,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 55254
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 280,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37616617
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 281,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 227658
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 2696557
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20669
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 23395
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 123712
            }
          }
        ],
        "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": 85271729
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 285,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 19304757
            }
          },
          {
            "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": 133148439
            }
          },
          {
            "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": 43322
            }
          },
          {
            "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": 12407636
            }
          },
          {
            "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": 88577
            }
          },
          {
            "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": 981648502
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 291,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37105567
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 292,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 175780
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 293,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 39826300
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 294,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 143650
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 295,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45340774
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 296,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 157685
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1841089
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 12463
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18926
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 204334
            }
          }
        ],
        "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": 68196241
            }
          },
          {
            "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": 53661
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 301,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 38819678
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 302,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 217518
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 996945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6221
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13355
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 77004
            }
          }
        ],
        "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": 38377688
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 306,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 74179
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 307,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 35767
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 308,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50356148
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 309,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 192451
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 310,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 69231
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 311,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 59081
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1122710
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8837
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12553
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 75342
            }
          }
        ],
        "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": 44858807
            }
          },
          {
            "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": 77896
            }
          },
          {
            "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": 967232855
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 317,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9764890
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 318,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 154661
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 319,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8395828
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 320,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 150251
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 321,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9295979
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 322,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 130805
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1178274
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11633
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14297
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 87496
            }
          }
        ],
        "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": 30686486
            }
          },
          {
            "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": 93055
            }
          },
          {
            "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": 963336683
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 328,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 15180178
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 329,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 37581
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 330,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9508237
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 331,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 15550
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 332,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7864940
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 333,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 265519
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1283322
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5911
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18084
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 150602
            }
          }
        ],
        "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": 28347941
            }
          },
          {
            "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": 113112
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 338,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34380507
            }
          },
          {
            "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": 182514
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1365025
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6172
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13044
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 93175
            }
          }
        ],
        "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": 28332823
            }
          },
          {
            "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": 63549
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 344,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51260065
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 345,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 264608
            }
          },
          {
            "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": 80321
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1616197
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6472
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13104
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 104797
            }
          }
        ],
        "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": 26597521
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-thunderbird'",
            "line": 350,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 270949
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 351,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 113664
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 352,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 42058144
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 353,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 195166
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-thunderbird' suite",
            "line": 354,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 67036
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 355,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 59402
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 2148508
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 16681
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14437
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 114806
            }
          }
        ],
        "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": 101634319
            }
          },
          {
            "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": 185517
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 360,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40312113
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 361,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 200336
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1415930
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6983
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13976
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 80571
            }
          }
        ],
        "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": 91913581
            }
          },
          {
            "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": 86563
            }
          },
          {
            "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": 984428226
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 367,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9872592
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 368,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 132861
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 369,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7755143
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 370,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 89258
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 371,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8119269
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 372,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 88427
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1438294
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7964
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13816
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 118032
            }
          }
        ],
        "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": 31294559
            }
          },
          {
            "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": 116910
            }
          },
          {
            "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": 1010843847
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 378,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12987847
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 379,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 25569
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 380,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 13689966
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 381,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 29616
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 382,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11246002
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 383,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 166524
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1389311
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 12143
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16741
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 149991
            }
          }
        ],
        "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": 64544600
            }
          },
          {
            "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": 117621
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 388,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 109575
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 389,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 42527237
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 390,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 282190
            }
          },
          {
            "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": 184307
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 392,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 220354
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1510508
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 15980
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 39645
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 193053
            }
          }
        ],
        "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": 76924875
            }
          },
          {
            "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": 80632
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 397,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46342825
            }
          },
          {
            "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": 298641
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1439104
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18103
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 20308
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 127190
            }
          }
        ],
        "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": 55102087
            }
          },
          {
            "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": 106720
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 403,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49382427
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 404,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 303641
            }
          },
          {
            "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": 97713
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1408507
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8726
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19967
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 119315
            }
          }
        ],
        "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": 71665802
            }
          },
          {
            "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": 64682
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 410,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6769181
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 411,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22482
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1203631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6993
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12604
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 73238
            }
          }
        ],
        "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": 61894631
            }
          },
          {
            "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": 84910
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 416,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8005834
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 417,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 29796
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1722447
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7975
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14437
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 103767
            }
          }
        ],
        "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": 63360895
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file is empty",
            "line": 421,
            "match": {
              "location": "features/step_definitions/build.rb:147"
            },
            "result": {
              "status": "passed",
              "duration": 51357
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 422,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6698868
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 423,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 51757
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1096249
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7093
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12894
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2655831
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7624725710
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5834815
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 26883458
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 40777192702
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7704213263
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 46306798
            }
          }
        ]
      },
      {
        "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:4"
            },
            "result": {
              "status": "passed",
              "duration": 139972301
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1040801413
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 38913706
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16741
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 7862074
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7083712790
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5577281
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18243843
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11945589140
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8164782190
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 44605951
            }
          }
        ]
      },
      {
        "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:932"
            },
            "result": {
              "status": "passed",
              "duration": 145706027
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"manually-added-con\" NetworkManager connection",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:947"
            },
            "result": {
              "status": "passed",
              "duration": 403640810
            }
          },
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 22,
            "match": {
              "location": "features/step_definitions/dhcp.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 167397529
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 953478831
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 41278309
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19708
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3205805
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7357263926
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9844048484
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 7,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 16722137146
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 8,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 745492549
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 823285225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24656
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3705805
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10758647803
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9663566539
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 13257677450
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 14,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 626062390
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1269400233
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23414
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18966
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3510046
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2542947
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7588612706
            }
          },
          {
            "keyword": "When ",
            "name": "I start Electrum through the GNOME menu",
            "line": 9,
            "match": {
              "location": "features/step_definitions/electrum.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 10461287053
            }
          },
          {
            "keyword": "But ",
            "name": "the \"electrum\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 991373613
            }
          },
          {
            "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": 260190883
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 83837384
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1072503210
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 92974
            }
          }
        ]
      }
    ]
  },
  {
    "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\n  And AppArmor should prevent Evince from doing dangerous things",
    "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": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17252
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4379209
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7359421107
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/usr/share/cups/data/default-testpage.pdf\" with Evince",
            "line": 9,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4919875497
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 1160946392
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4691257723
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 662826507
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20659
            }
          }
        ]
      },
      {
        "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": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13816
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2620785
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7521608030
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia\" as user \"amnesia\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 72451389
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/default-testpage.pdf\" with Evince",
            "line": 16,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4600364542
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 1119998073
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4271115322
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 881409764
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22863
            }
          }
        ]
      },
      {
        "id": "using-evince;i-cannot-view-a-pdf-file-stored-in-non-persistent-/home/amnesia/.gnupg",
        "keyword": "Scenario",
        "name": "I cannot view a PDF file stored in non-persistent /home/amnesia/.gnupg",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16390
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3617137
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7122034788
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/.gnupg\" as user \"amnesia\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 115973474
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/default-testpage.pdf\" exists",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 76042608
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\" exists after at most 10 seconds",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 33247668
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\" exists after at most 10 seconds",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 79448938
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"/usr/bin/evince\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 104784679
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/home/amnesia/.gnupg/default-testpage.pdf\" with Evince",
            "line": 28,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4870792035
            }
          },
          {
            "keyword": "Then ",
            "name": "Evince tells me it cannot open \"/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/evince.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 315864695
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/evince\" from opening \"/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 70110169
            }
          },
          {
            "keyword": "When ",
            "name": "I close Evince",
            "line": 31,
            "match": {
              "location": "features/step_definitions/evince.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 181797630
            }
          },
          {
            "keyword": "Given ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/evince\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 85888099
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\" with Evince",
            "line": 33,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 2046404126
            }
          },
          {
            "keyword": "Then ",
            "name": "Evince tells me it cannot open \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/evince.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 180674058
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/evince\" from opening \"/usr/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 68054176
            }
          },
          {
            "keyword": "When ",
            "name": "I close Evince",
            "line": 36,
            "match": {
              "location": "features/step_definitions/evince.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 185010788
            }
          },
          {
            "keyword": "Given ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/evince\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 146142698
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/live/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\" with Evince",
            "line": 38,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 2029022490
            }
          },
          {
            "keyword": "Then ",
            "name": "Evince tells me it cannot open \"/live/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 39,
            "match": {
              "location": "features/step_definitions/evince.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 184717336
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/evince\" from opening \"/usr/lib/live/mount/overlay/rw/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 42,
            "comments": [
              {
                "value": "# Due to our AppArmor aliases, /live/overlay will be treated",
                "line": 40
              },
              {
                "value": "# as /usr/lib/live/mount/overlay.",
                "line": 41
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 117311609
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 776823158
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21070
            }
          }
        ]
      },
      {
        "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": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13746
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2587332
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8145165991
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 61240151
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/Persistent/default-testpage.pdf\" exists",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 76213650
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/default-testpage.pdf\" with Evince",
            "line": 48,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4946314769
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 1231761318
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/Persistent/output.pdf\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4723687170
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1176913089
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21331
            }
          }
        ]
      },
      {
        "id": "using-evince;i-cannot-view-a-pdf-file-stored-in-persistent-/home/amnesia/.gnupg",
        "keyword": "Scenario",
        "name": "I cannot view a PDF file stored in persistent /home/amnesia/.gnupg",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11903
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3686932
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7760672615
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/.gnupg\" as user \"amnesia\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 102421080
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/default-testpage.pdf\" exists",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 48829103
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"/usr/bin/evince\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 137363414
            }
          },
          {
            "keyword": "And ",
            "name": "I try to open \"/home/amnesia/.gnupg/default-testpage.pdf\" with Evince",
            "line": 58,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4873719700
            }
          },
          {
            "keyword": "Then ",
            "name": "Evince tells me it cannot open \"/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/evince.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 1292350087
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/evince\" from opening \"/home/amnesia/.gnupg/default-testpage.pdf\"",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 52137202
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 968185115
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20849
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13255
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3119955
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6675724442
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 7,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 10000150146
            }
          },
          {
            "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": 500585166
            }
          },
          {
            "keyword": "When ",
            "name": "I press the \"PRINTSCREEN\" key",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1241"
            },
            "result": {
              "status": "passed",
              "duration": 120976101
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME offers me various screenshot options",
            "line": 10,
            "match": {
              "location": "features/step_definitions/gnome.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 957752515
            }
          },
          {
            "keyword": "And ",
            "name": "I press the \"Return\" key",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1241"
            },
            "result": {
              "status": "passed",
              "duration": 120746350
            }
          },
          {
            "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": 41231308
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 984454365
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23764
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4379224
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6770471149
            }
          },
          {
            "keyword": "When ",
            "name": "the \"Dogtail rules!\" notification is sent",
            "line": 16,
            "match": {
              "location": "features/step_definitions/gnome.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 280375698
            }
          },
          {
            "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": 436428473
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 901752912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34795
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14096
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3334129
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7756686799
            }
          },
          {
            "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:137"
            },
            "result": {
              "status": "passed",
              "duration": 15887380
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 18215567193
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7448460729
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9545832048
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tails-additional-software-config\" window",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1877561371
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Disks\" via GNOME Activities Overview",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7590258161
            }
          },
          {
            "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:1211"
            },
            "result": {
              "status": "passed",
              "duration": 323209101
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Console\" via GNOME Activities Overview",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7735992975
            }
          },
          {
            "keyword": "And ",
            "name": "I close Console",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1223"
            },
            "result": {
              "status": "passed",
              "duration": 2931287994
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8148935725
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"org.gnome.Nautilus\" window",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 13756685979
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Persistent Storage\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9929627372
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tps-frontend\" window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 2287947706
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Back Up Persistent Storage\" via GNOME Activities Overview",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 10096638818
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 2282414400
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin\" via GNOME Activities Overview",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7747505328
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Pidgin\" window via Alt+F4",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1211"
            },
            "result": {
              "status": "passed",
              "duration": 2079648427
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Thunderbird\" via GNOME Activities Overview",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8488780346
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Start Thunderbird\" in the \"Thunderbird Migration\" zenity dialog",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1889"
            },
            "result": {
              "status": "passed",
              "duration": 3722797676
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Thunderbird\" window",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 2666929221
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tor Browser\" via GNOME Activities Overview",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8383793680
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 5411882294
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unlock VeraCrypt Volumes\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 10001666847
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"unlock-veracrypt-volumes\" window",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1785766403
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unsafe Browser\" via GNOME Activities Overview",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8901394764
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 4080569720
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7862980806
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"secrets\" window",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 3342295124
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1636700418
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29104
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 26770
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3829949
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 73704110
            }
          },
          {
            "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": 42310
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 997005240
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 28025390289
            }
          },
          {
            "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": 1445770491
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 660621774
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 60493495
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1897237
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 79181174
            }
          },
          {
            "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": 32552
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 833286896
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 25791974842
            }
          },
          {
            "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": 1428763745
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 583444351
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 16285994
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17273
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2186008
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 57702336
            }
          },
          {
            "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": 34705
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 827820567
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 26347611228
            }
          },
          {
            "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": 3156739590
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 841519266
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10081631
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 22041
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2737586
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53191145
            }
          },
          {
            "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8198948543
            }
          },
          {
            "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": 1344146556
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 907329794
            }
          },
          {
            "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": 18046718523
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1390604700
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25427
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 20058
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4708391
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 89416926
            }
          },
          {
            "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7787544246
            }
          },
          {
            "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": 339818184
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 1667201447
            }
          },
          {
            "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": 13844464038
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1945800515
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 26259
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12232
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5047839
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 57226187
            }
          },
          {
            "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7681208875
            }
          },
          {
            "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": 1449235020
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 888975454
            }
          },
          {
            "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": 19376272607
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1465375906
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21320
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12824
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5101849
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9867486562
            }
          },
          {
            "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": 266882054
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 263208661
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 762553402
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 44423709950
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 11289120514
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7256949827
            }
          },
          {
            "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": 150670612
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 12487481
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 964178207
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6168654
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16841
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2041057
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 21856590513
            }
          },
          {
            "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": 401588573
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 305318405
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 970995987
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 43316667002
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 11509861117
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7591922970
            }
          },
          {
            "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": 179641486
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5731702
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 702174218
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 12695432
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 29195
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 9610624
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 85889955
            }
          },
          {
            "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:194"
            },
            "result": {
              "status": "passed",
              "duration": 54383
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12943467
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1023544763
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 15263538485
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 76088230904
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 601982214
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids creating a persistent partition",
            "line": 56,
            "match": {
              "location": "features/step_definitions/hardware.rb:97"
            },
            "result": {
              "status": "passed",
              "duration": 49486631
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 12464568548
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7331019360
            }
          },
          {
            "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": 143513624
            }
          },
          {
            "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:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1242088922
            }
          },
          {
            "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": 1818470223
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 64,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 7093492
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1426344319
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 172157330
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19357
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2702570
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 91951724
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=guid\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 33663
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9675516
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1017906968
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 15779486900
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 72088854320
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 570793187
            }
          },
          {
            "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": 52290999
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 38069261
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 188090480
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error guid-not-randomized",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 7788057
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1016268926
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 148582576
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 28914
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 7050761
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 77810454
            }
          },
          {
            "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:194"
            },
            "result": {
              "status": "passed",
              "duration": 40015
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12317571
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1018265757
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 14744363958
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 50344009415
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 571117636
            }
          },
          {
            "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": 48747036
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 29425564
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 192149104
            }
          },
          {
            "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": 7668232
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 707726302
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 244973735
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 46156
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 7638997
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 75033501
            }
          },
          {
            "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:194"
            },
            "result": {
              "status": "passed",
              "duration": 32852
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 11209899
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1019157282
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 14806789814
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 49660429952
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 654401943
            }
          },
          {
            "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": 54784342
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 36053370
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 178371076
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error fs-not-resized",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 7738323
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 753447589
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 134176716
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18606
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3499868
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 73120946
            }
          },
          {
            "keyword": "And ",
            "name": "the computer has an unsupported graphics card",
            "line": 10,
            "match": {
              "location": "features/step_definitions/hardware.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 43061
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 773633849
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 28396848766
            }
          },
          {
            "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": 11650696154
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1070406019
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7947947
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18103
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3196749
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7103142122
            }
          },
          {
            "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": 2305784753
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 800428156
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20949
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12554
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4502452
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7090075536
            }
          },
          {
            "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": 1252423240
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 916114906
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21030
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2897155
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8512410613
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 30447671662
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 62086395
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14571635283
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1086005798
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20829
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12483
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2904799
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7449986211
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 30576245270
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 42294148
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14592767469
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1261527631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20650
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14707
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2838314
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7745865645
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 29617958427
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 57212224
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14963158778
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1075769619
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21270
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13665
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3144760
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 20121832615
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 28620083084
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 38906159
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 15037759873
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1269041167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21981
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12243
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2779885
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7869710327
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 31180030308
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 44762435
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 14965783403
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 934456640
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21160
            }
          }
        ]
      },
      {
        "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": 44,
        "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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12654
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2757913
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 44,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7857432678
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Arabic (ar)",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 29897932174
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"eg\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 117294007
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 113468647
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16880844
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 13133646153
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6038441433
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5218405372
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 57632573
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 9519649035
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5386155405
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5271707594
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 44,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5752727445
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 586320629
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1909188931
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23815
            }
          }
        ]
      },
      {
        "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": 45,
        "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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 22333
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3100819
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7955051338
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Chinese (zh_CN)",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 30284872033
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"cn\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 138261931
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 147636139
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 37780584
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12197160566
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5869674900
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5254818864
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 78100527
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 8194611553
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5363331370
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5246283776
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 45,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5073042982
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 364929135
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 982362190
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23814
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15038
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2850268
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7141923186
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in English (en)",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 16933638031
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 114692955
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 95456946
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23575457
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12090601604
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5561778830
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5187680862
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 75502675
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 8943942170
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4151551696
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5203472714
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5955305133
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 542075711
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1293539272
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30507
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 25469
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6015154
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7610856332
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in French (fr)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 30361462235
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"fr\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 150031418
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 93120013
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 39291371
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 13017230265
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6953078087
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5267051258
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 90022433
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 8689535565
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 6832945902
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5274240980
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4961425939
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"fr\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 422549688
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1450773688
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21561
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12514
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4686187
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7595789121
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de)",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 29946712478
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"de\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 97187516
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 84261675
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17832794
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 13136815138
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6001010243
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5234816636
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 76602120
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 9745598173
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 6172449946
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5231161291
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5949690043
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"de\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 407076998
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1060667064
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22443
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14727
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5391523
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7608949010
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Hindi (hi)",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 29592030148
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"in\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 168074847
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 102411334
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21994654
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12901964238
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6593230201
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5281845121
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 66235127
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 8470894821
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 6272259017
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5241270393
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4634014695
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 387527017
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1475607102
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24355
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 26019
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3896122
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7545524258
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Indonesian (id)",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 30201287861
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"id\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 112836586
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 128055717
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14822166
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12466158156
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6765534637
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5228864891
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 53332609
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 9732858090
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5519936824
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5205134040
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6291403767
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 448698215
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1274698324
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21250
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14317
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5006509
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7457450287
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Italian (it)",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 31682319374
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"it\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 122143836
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 98954656
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 28031219
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11912224798
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6698583089
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5327519936
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 55608014
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 9600742157
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 6662490235
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5251947247
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4945179936
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 405327434
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1043801584
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40406
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 22883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3920217
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7868566187
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Persian (fa)",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 30400953103
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ir\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 122231570
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 114301587
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14399533
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12252554925
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6361199349
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5266399465
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 84994661
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 9253657409
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4881923967
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5265801509
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5438920833
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ir\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 406287560
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1245695571
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22703
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13506
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2602851
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7443913036
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Portuguese (pt)",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 29488362406
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"pt\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 102721901
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 124914511
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25185924
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 42805829346
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5482960212
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5211072392
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 74752099
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 12559343819
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5130185612
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5246228620
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5236875498
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 542777623
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1383113681
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23745
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16642
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3203740
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7705122666
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Russian (ru)",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 31025886655
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ru\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 144230553
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 133953241
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14091999
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 11628856701
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6737994248
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5297310401
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 70869786
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 8087636603
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5847568127
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5260189651
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5198189993
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ru\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 426888022
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1186055403
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23965
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14477
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3451596
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7926632955
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Spanish (es)",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 30562968561
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"es\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 112580056
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 100906550
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19540618
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12311218666
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5507549395
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5198221677
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 66305503
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 8842007985
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5209426047
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5228213512
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5404745756
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 501534793
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1268166996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23324
            }
          }
        ]
      },
      {
        "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": 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": 37
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 38
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 40
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 41
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17522
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2923042
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7539337211
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Turkish (tr)",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 29623843328
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"tr\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1653"
            },
            "result": {
              "status": "passed",
              "duration": 93845353
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1683"
            },
            "result": {
              "status": "passed",
              "duration": 107443255
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25201606
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 13087862934
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6481936282
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5263041231
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1671"
            },
            "result": {
              "status": "passed",
              "duration": 63038494
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 8649103903
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5957506965
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5351494846
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4953738236
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 365267988
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1165172443
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23323
            }
          }
        ]
      },
      {
        "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": 58,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13706
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2805411
            }
          }
        ],
        "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": 59,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9615736342
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:478"
            },
            "result": {
              "status": "passed",
              "duration": 4702094954
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1831"
            },
            "result": {
              "status": "passed",
              "duration": 2101728871
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 11885599801
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 48378443129
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 280230349
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1070084116
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6366002
            }
          }
        ]
      },
      {
        "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": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17844
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1998887
            }
          }
        ],
        "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": 67,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7968177933
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:478"
            },
            "result": {
              "status": "passed",
              "duration": 4644171056
            }
          },
          {
            "keyword": "And ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:497"
            },
            "result": {
              "status": "passed",
              "duration": 2517573268
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1839"
            },
            "result": {
              "status": "passed",
              "duration": 138618371
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to French (fr)",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:478"
            },
            "result": {
              "status": "passed",
              "duration": 4487337048
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1839"
            },
            "result": {
              "status": "passed",
              "duration": 108124028
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 5673782911
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 48554794237
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1839"
            },
            "result": {
              "status": "passed",
              "duration": 399474260
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to French",
            "line": 76,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 861240295
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 9034929812
            }
          },
          {
            "keyword": "Then ",
            "name": "the language is set to French",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1877"
            },
            "result": {
              "status": "passed",
              "duration": 51911570
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 834414849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7211191
            }
          }
        ]
      },
      {
        "id": "localization;cleartext-localization-preferences-have-priority-over-persistent-storage",
        "keyword": "Scenario",
        "name": "Cleartext localization preferences have priority over Persistent Storage",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17072
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2287327
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 81,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9243991502
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 83,
            "comments": [
              {
                "value": "# The first boot simulates a legacy Tails, where locale is only saved in Persistent Storage",
                "line": 82
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 407788956
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 44498241956
            }
          },
          {
            "keyword": "And ",
            "name": "I manually store legacy localization settings in Persistent Storage",
            "line": 85,
            "match": {
              "location": "features/step_definitions/usb.rb:1584"
            },
            "result": {
              "status": "passed",
              "duration": 720677577
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 12904918667
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 88,
            "comments": [
              {
                "value": "# The second boot verifies that the legacy setting still works",
                "line": 87
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 41819244192
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 310054343
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 254502572
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 8079886598
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to German",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 508934753
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 225795278
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:478"
            },
            "result": {
              "status": "passed",
              "duration": 4571977485
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1831"
            },
            "result": {
              "status": "passed",
              "duration": 2136413152
            }
          },
          {
            "keyword": "When ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:497"
            },
            "result": {
              "status": "passed",
              "duration": 2446385973
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1839"
            },
            "result": {
              "status": "passed",
              "duration": 100313457
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 2903620716
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 100,
            "comments": [
              {
                "value": "# The third boot verifies that cleartext has priority",
                "line": 99
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 41486794758
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 779743876
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Italy",
            "line": 102,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 247822722
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 10157009791
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 105,
            "comments": [
              {
                "value": "# Only formats are loaded from persistence",
                "line": 104
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 297264994
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 856402012
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 573888870
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11421123
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 20760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4956033
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7636123019
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3653686
            }
          },
          {
            "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": 7997174409
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 13219826691
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15810821
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 39654988144
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 15,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 60686102
            }
          },
          {
            "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": 68410996
            }
          },
          {
            "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": 1297499466
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 18,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 57987348
            }
          },
          {
            "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": 66582240
            }
          },
          {
            "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": 141263490
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1255471356
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37312607
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12244
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3113190
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7663824779
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 7917567
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 13435492317
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15008504
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 12199603174
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 28,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 94081947
            }
          },
          {
            "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": 91896140
            }
          },
          {
            "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": 1305185414
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 31,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 58258679
            }
          },
          {
            "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": 52955914
            }
          },
          {
            "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": 118448507
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 922595674
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54333363
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13204
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4904747
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7548862240
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5781113
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 24741815
            }
          },
          {
            "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": 101584918
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 14076703899
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 41,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 62270198
            }
          },
          {
            "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": 5945523
            }
          },
          {
            "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:625"
            },
            "result": {
              "status": "passed",
              "duration": 1683521404
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 705688497
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54423543
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 50665
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6240476
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7584737588
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4148485
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23521942
            }
          },
          {
            "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": 122797140
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 15816383372
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 51,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 66686537
            }
          },
          {
            "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": 6405548
            }
          },
          {
            "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:625"
            },
            "result": {
              "status": "passed",
              "duration": 1754446883
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 817154704
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 60182154
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18044
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3439293
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7583364022
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 21181034
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 28789160
            }
          },
          {
            "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": 111729811
            }
          },
          {
            "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": 153288911
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 16795656315
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 62,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 98223633
            }
          },
          {
            "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": 315069879
            }
          },
          {
            "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": 6193619
            }
          },
          {
            "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:625"
            },
            "result": {
              "status": "passed",
              "duration": 1818533460
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 804613470
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46660956
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16801
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4205782
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 70630498
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2930167
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 822673578
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 37205706379
            }
          },
          {
            "keyword": "And ",
            "name": "no network interfaces are enabled",
            "line": 72,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 386900165
            }
          },
          {
            "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": 10166325
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 800719616
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 76099107
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18044
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2762311
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 55562794
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 55304467719
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a sample PNG",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 9845257812
            }
          },
          {
            "keyword": "Then ",
            "name": "MAT can clean some sample PNG file",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 1103082422
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 521299170
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7148384
            }
          }
        ]
      }
    ]
  },
  {
    "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": 2,
    "tags": [
      {
        "name": "@source",
        "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": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 18715
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 86743
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 11,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 231103
            }
          },
          {
            "keyword": "Then ",
            "name": "all packages listed in the build manifest are up-to-date",
            "line": 12,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 571321803
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 137138
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5741
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12443
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2643508
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7655034719
            }
          },
          {
            "keyword": "And ",
            "name": "I wait between 30 and 60 seconds",
            "line": 6,
            "output": [
              "Slept for 44 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 44000289069
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Status icon tells me that Tor is not usable",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 346101871
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18654647
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 10570386662
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Status icon tells me that Tor is usable",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 363388684
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8175940772
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:738"
            },
            "result": {
              "status": "passed",
              "duration": 52592463
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 593289520
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23164
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13255
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4865394
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7826627523
            }
          },
          {
            "keyword": "And ",
            "name": "I disable networking in Tails Greeter",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:564"
            },
            "result": {
              "status": "passed",
              "duration": 7982444299
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 16124288588
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 87958454
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 81149587
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 21,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 10000183724
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 22,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 62052551
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 783014636
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21850
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12774
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3729478
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 12345486613
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Onion Circuits\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9053001209
            }
          },
          {
            "keyword": "Then ",
            "name": "Onion Circuits starts",
            "line": 7,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 698873147
            }
          },
          {
            "keyword": "And ",
            "name": "Onion Circuits shows some circuits",
            "line": 8,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 179816345
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1651827475
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22451
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12944
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3249227
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 89719099779
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 8,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 7348377474
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"python3-behave\" using apt",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6312733960
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails Persistent Storage behave tests pass",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:1680"
            },
            "result": {
              "status": "passed",
              "duration": 1085857020
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1076264053
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22722
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17312
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5950001
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9657719477
            }
          },
          {
            "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:510"
            },
            "result": {
              "status": "passed",
              "duration": 21819791815
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 278143094
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is disabled",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:827"
            },
            "result": {
              "status": "passed",
              "duration": 97267677
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:628"
            },
            "result": {
              "status": "passed",
              "duration": 9170272687
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1461725014
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29425
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16952
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3767490
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9573257061
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 560772150
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 105904680
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 22969691653
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 24,
            "match": {
              "location": "features/step_definitions/usb.rb:1700"
            },
            "result": {
              "status": "passed",
              "duration": 533599066
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 8478791635
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 65064226416
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 190336295
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:1711"
            },
            "result": {
              "status": "passed",
              "duration": 47879817
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 898686924
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8759070
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18566
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4777387
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8020502170
            }
          },
          {
            "keyword": "And ",
            "name": "the system is very low on memory",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:367"
            },
            "result": {
              "status": "passed",
              "duration": 9981869012
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 223221355
            }
          },
          {
            "keyword": "When ",
            "name": "I try to create a persistent partition",
            "line": 34,
            "match": {
              "location": "features/step_definitions/usb.rb:345"
            },
            "result": {
              "status": "passed",
              "duration": 4761189465
            }
          },
          {
            "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:438"
            },
            "result": {
              "status": "passed",
              "duration": 93914698
            }
          },
          {
            "keyword": "When ",
            "name": "I close the Persistent Storage app",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:414"
            },
            "result": {
              "status": "passed",
              "duration": 2404640190
            }
          },
          {
            "keyword": "And ",
            "name": "I free up some memory",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:407"
            },
            "result": {
              "status": "passed",
              "duration": 859278295
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 10163669838
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1700"
            },
            "result": {
              "status": "passed",
              "duration": 557630117
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 927559902
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24987
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14467
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6459999
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8986699492
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 314069850
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 44,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1295057015
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 45,
            "match": {
              "location": "features/step_definitions/usb.rb:1018"
            },
            "result": {
              "status": "passed",
              "duration": 2451589701
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2886409459
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1344448343
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 14221539307
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 75453573899
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1411877423
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 628839908
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17159477
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 24136
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5150820
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8459167112
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 71692457
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 53688522
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 56,
            "match": {
              "location": "features/step_definitions/usb.rb:1700"
            },
            "result": {
              "status": "passed",
              "duration": 60513459
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 57,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 3054043583
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is not active",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 54607721
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent directory does not exist",
            "line": 59,
            "match": {
              "location": "features/step_definitions/usb.rb:1717"
            },
            "result": {
              "status": "passed",
              "duration": 41594165
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the first tps feature",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2434822068
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 56991751
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 62,
            "match": {
              "location": "features/step_definitions/usb.rb:1711"
            },
            "result": {
              "status": "passed",
              "duration": 67994066
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 951816709
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23474
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12052
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5380691
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8241713457
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1026"
            },
            "result": {
              "status": "passed",
              "duration": 77629874
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 84001129
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the first tps feature",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2745998253
            }
          },
          {
            "keyword": "And ",
            "name": "I delete the data of the Persistent Folder feature",
            "line": 69,
            "match": {
              "location": "features/step_definitions/usb.rb:1721"
            },
            "result": {
              "status": "passed",
              "duration": 3025331176
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created does not exist on the Persistent Storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/usb.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 80099245
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1092935325
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22091
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11973
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3276077
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7749873786
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18806441
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 19689358032
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:1096"
            },
            "result": {
              "status": "passed",
              "duration": 218683508
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1056"
            },
            "result": {
              "status": "passed",
              "duration": 1375496346
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 24791695191
            }
          },
          {
            "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?",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1135"
            },
            "result": {
              "status": "passed",
              "duration": 13955480540
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 510113345
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27522
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 56866
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 8519179
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8041949209
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17078925
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 19482593746
            }
          },
          {
            "keyword": "And ",
            "name": "I add a wired DHCP NetworkManager connection called \"persistent-con-current\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:932"
            },
            "result": {
              "status": "passed",
              "duration": 112626171
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 9963243509
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 78151989199
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4871445
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 22697234
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 22664841056
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"persistent-con-current\" NetworkManager connection",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:947"
            },
            "result": {
              "status": "passed",
              "duration": 453431968
            }
          },
          {
            "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": 74400094
            }
          },
          {
            "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": 126412340
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 751741404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 84700313
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 20719
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5648846
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10254917960
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence creation in Tails Greeter",
            "line": 98,
            "match": {
              "location": "features/step_definitions/usb.rb:322"
            },
            "result": {
              "status": "passed",
              "duration": 1117930792
            }
          },
          {
            "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:510"
            },
            "result": {
              "status": "passed",
              "duration": 17741430924
            }
          },
          {
            "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:327"
            },
            "result": {
              "status": "passed",
              "duration": 21861157749
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1948177201
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29095
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14868
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4245258
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9671347764
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 22454730079
            }
          },
          {
            "keyword": "Then ",
            "name": "no persistent Greeter options were restored",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1668"
            },
            "result": {
              "status": "passed",
              "duration": 13599762781
            }
          },
          {
            "keyword": "When ",
            "name": "I set all Greeter options to non-default values",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1608"
            },
            "result": {
              "status": "passed",
              "duration": 39314393676
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 354366801
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 291694767
            }
          },
          {
            "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:464"
            },
            "result": {
              "status": "passed",
              "duration": 4654049568
            }
          },
          {
            "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:510"
            },
            "result": {
              "status": "passed",
              "duration": 26700170685
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1632"
            },
            "result": {
              "status": "passed",
              "duration": 197403169
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 10581235996
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 42144020500
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1860"
            },
            "result": {
              "status": "passed",
              "duration": 392384888
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 116,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 303993327
            }
          },
          {
            "keyword": "Given ",
            "name": "I enable persistence",
            "line": 117,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 9008025882
            }
          },
          {
            "keyword": "Then ",
            "name": "persistent Greeter options were restored",
            "line": 118,
            "match": {
              "location": "features/step_definitions/usb.rb:1668"
            },
            "result": {
              "status": "passed",
              "duration": 90211770
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Belgium",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1870"
            },
            "result": {
              "status": "passed",
              "duration": 272020501
            }
          },
          {
            "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:510"
            },
            "result": {
              "status": "passed",
              "duration": 10455991069
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 121,
            "match": {
              "location": "features/step_definitions/usb.rb:1632"
            },
            "result": {
              "status": "passed",
              "duration": 220997677
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 818971223
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17357035
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19166
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4816450
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9012444720
            }
          },
          {
            "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:442"
            },
            "result": {
              "status": "passed",
              "duration": 36790980121
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 13510283882
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 69644907189
            }
          },
          {
            "keyword": "And ",
            "name": "I change the passphrase of the Persistent Storage back to the original",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:442"
            },
            "result": {
              "status": "passed",
              "duration": 18952165448
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1438068233
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 12411683
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17293
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2298389
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 23783970505
            }
          },
          {
            "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:510"
            },
            "result": {
              "status": "passed",
              "duration": 23164531796
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is disabled",
            "line": 136,
            "match": {
              "location": "features/step_definitions/usb.rb:827"
            },
            "result": {
              "status": "passed",
              "duration": 105387018
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 137,
            "match": {
              "location": "features/step_definitions/usb.rb:628"
            },
            "result": {
              "status": "passed",
              "duration": 9646723616
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 9148320088
            }
          },
          {
            "keyword": "When ",
            "name": "I delete the persistent partition",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:1175"
            },
            "result": {
              "status": "passed",
              "duration": 2852155659
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no persistence partition on USB drive \"__internal\"",
            "line": 140,
            "match": {
              "location": "features/step_definitions/usb.rb:586"
            },
            "result": {
              "status": "passed",
              "duration": 445469073
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 878481365
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22662
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12975
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4949901
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8130750175
            }
          },
          {
            "keyword": "When ",
            "name": "I write some dotfile expected to persist",
            "line": 144,
            "match": {
              "location": "features/step_definitions/usb.rb:1066"
            },
            "result": {
              "status": "passed",
              "duration": 52964196
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 145,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 9751102649
            }
          },
          {
            "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:232"
            },
            "result": {
              "status": "passed",
              "duration": 69020340245
            }
          },
          {
            "keyword": "Then ",
            "name": "the expected persistent dotfile is present in the filesystem",
            "line": 147,
            "match": {
              "location": "features/step_definitions/usb.rb:1121"
            },
            "result": {
              "status": "passed",
              "duration": 232417400
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 653956850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7725397
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 23253
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2637508
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8521946465
            }
          },
          {
            "keyword": "And ",
            "name": "I create a symlink \"/home/amnesia/Persistent\" to \"/etc\"",
            "line": 151,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1711"
            },
            "result": {
              "status": "passed",
              "duration": 61164719
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 152,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1195180075
            }
          },
          {
            "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:1754"
            },
            "result": {
              "status": "passed",
              "duration": 15628644549
            }
          },
          {
            "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:510"
            },
            "result": {
              "status": "passed",
              "duration": 14713449347
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 155,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8370668693
            }
          },
          {
            "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:1777"
            },
            "result": {
              "status": "passed",
              "duration": 1338541651
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are enabled",
            "line": 157,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1914990637
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features but the first one are active",
            "line": 158,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1449950929
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 732920780
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24116
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 21941
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 10739432
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 38924446562
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 162,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 28125040601
            }
          },
          {
            "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:510"
            },
            "result": {
              "status": "passed",
              "duration": 12383190342
            }
          },
          {
            "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 756942809
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is enabled",
            "line": 165,
            "match": {
              "location": "features/step_definitions/usb.rb:831"
            },
            "result": {
              "status": "passed",
              "duration": 1864905115
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1212694076
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 26219
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5808564
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7671236216
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence but something goes wrong during the LUKS header upgrade",
            "line": 169,
            "match": {
              "location": "features/step_definitions/usb.rb:706"
            },
            "result": {
              "status": "passed",
              "duration": 16741186069
            }
          },
          {
            "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:623"
            },
            "result": {
              "status": "passed",
              "duration": 607714704
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 815943673
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27301
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16341
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5143846
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9590091366
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\"",
            "line": 174,
            "match": {
              "location": "features/step_definitions/usb.rb:1804"
            },
            "result": {
              "status": "passed",
              "duration": 15435047157
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 175,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 8495381150
            }
          },
          {
            "keyword": "Then ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 176,
            "match": {
              "location": "features/step_definitions/usb.rb:1846"
            },
            "result": {
              "status": "passed",
              "duration": 71688285
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is successfully enabled",
            "line": 177,
            "match": {
              "location": "features/step_definitions/usb.rb:681"
            },
            "result": {
              "status": "passed",
              "duration": 2116177954
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 967032038
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24397
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16951
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3975450
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9349415731
            }
          },
          {
            "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:1804"
            },
            "result": {
              "status": "passed",
              "duration": 16990176181
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 182,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1228512120
            }
          },
          {
            "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:1762"
            },
            "result": {
              "status": "passed",
              "duration": 4299963585
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 184,
            "match": {
              "location": "features/step_definitions/usb.rb:1854"
            },
            "result": {
              "status": "passed",
              "duration": 1160606104
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the filesystem was repaired successfully",
            "line": 185,
            "match": {
              "location": "features/step_definitions/usb.rb:1858"
            },
            "result": {
              "status": "passed",
              "duration": 707951342
            }
          },
          {
            "keyword": "And ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 186,
            "match": {
              "location": "features/step_definitions/usb.rb:1846"
            },
            "result": {
              "status": "passed",
              "duration": 70806098
            }
          },
          {
            "keyword": "When ",
            "name": "I close the filesystem repair dialog",
            "line": 187,
            "match": {
              "location": "features/step_definitions/usb.rb:1864"
            },
            "result": {
              "status": "passed",
              "duration": 1147428831
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is successfully enabled",
            "line": 188,
            "match": {
              "location": "features/step_definitions/usb.rb:681"
            },
            "result": {
              "status": "passed",
              "duration": 1102911414
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1276813028
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24466
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15230
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4819547
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8316716328
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent Storage filesystem is corrupted beyond what e2fsck can repair",
            "line": 193,
            "match": {
              "location": "features/step_definitions/usb.rb:1837"
            },
            "result": {
              "status": "passed",
              "duration": 73507704
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 194,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1217625876
            }
          },
          {
            "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:1762"
            },
            "result": {
              "status": "passed",
              "duration": 16084368549
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 196,
            "match": {
              "location": "features/step_definitions/usb.rb:1854"
            },
            "result": {
              "status": "passed",
              "duration": 1211055469
            }
          },
          {
            "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:1769"
            },
            "result": {
              "status": "passed",
              "duration": 30777056
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 198,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 12701998189
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 199,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 10727461785
            }
          },
          {
            "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:1820"
            },
            "result": {
              "status": "passed",
              "duration": 137860405
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/var/lib/gdm3/post-greeter-whisperback.json\" is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/common_steps.rb:998"
            },
            "result": {
              "status": "passed",
              "duration": 461385360
            }
          },
          {
            "keyword": "When ",
            "name": "I close the \"whisperback\" window",
            "line": 207,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1180"
            },
            "result": {
              "status": "passed",
              "duration": 1187318084
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 208,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 1790979039
            }
          },
          {
            "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:274"
            },
            "result": {
              "status": "passed",
              "duration": 998882249
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1278786062
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27572
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 29556
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5205902
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9100816390
            }
          },
          {
            "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:1804"
            },
            "result": {
              "status": "passed",
              "duration": 13560832642
            }
          },
          {
            "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": 1369471480
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 216,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1222664601
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that my hardware is probably failing",
            "line": 217,
            "match": {
              "location": "features/step_definitions/usb.rb:1872"
            },
            "result": {
              "status": "passed",
              "duration": 3075341707
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 218,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 13646779389
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 219,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 9279959343
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 220,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 2002243332
            }
          },
          {
            "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:274"
            },
            "result": {
              "status": "passed",
              "duration": 925288006
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 835360865
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23174
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3039632
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9874852823
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 25489413296
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 1294578777
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 32541091
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 5908144772
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11494080928
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1223171451
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 5911620
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 567289549
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 11812246995
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 43265826217
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6829851340
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5261567
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10192076328
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6209199
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18465470
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4589344465
            }
          }
        ]
      },
      {
        "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:509"
            },
            "result": {
              "status": "passed",
              "duration": 1474189049
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:841"
            },
            "result": {
              "status": "passed",
              "duration": 1800757286
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1279041457
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 7276110781
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 31,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 40670729
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 610084122
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 484463205
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 825301407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 95155116
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 20799
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 26051146
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7874084899
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 19459883038
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 738704576
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17436938
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2182148462
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11310669094
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1226622694
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 5725440
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 557859582
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 9028555382
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 39467263104
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 7556098889
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4842489
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10403732365
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 12065394
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23128243
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4543907989
            }
          }
        ]
      },
      {
        "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:509"
            },
            "result": {
              "status": "passed",
              "duration": 1546429061
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 37,
            "match": {
              "location": "features/step_definitions/tor.rb:841"
            },
            "result": {
              "status": "passed",
              "duration": 2044870396
            }
          },
          {
            "keyword": "And ",
            "name": "I disable saving bridges to Persistent Storage",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:740"
            },
            "result": {
              "status": "passed",
              "duration": 1355246779
            }
          },
          {
            "keyword": "And ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 7268769521
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1633919915
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 6993281
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is not enabled and not active",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 484447978
            }
          },
          {
            "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:1020"
            },
            "result": {
              "status": "passed",
              "duration": 354769385
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 764236560
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 66134852
            }
          }
        ]
      }
    ]
  },
  {
    "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 AppArmor should prevent Pidgin from doing dangerous things\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": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17573
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3060471
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7663640733
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 10337585086
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 13,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1265710744
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin's D-Bus interface is not available",
            "line": 14,
            "match": {
              "location": "features/step_definitions/pidgin.rb:314"
            },
            "result": {
              "status": "passed",
              "duration": 816819323
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 974657365
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21420
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;chatting-with-some-friend-over-xmpp",
        "keyword": "Scenario",
        "name": "Chatting with some friend over XMPP",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 16
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 80462
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2789231
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1752794
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 13518777070
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 10394709799
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 20,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1286128324
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 21,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 12834945447
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 22,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 501058554
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 23,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 16712148668
            }
          },
          {
            "keyword": "Given ",
            "name": "my XMPP friend goes online",
            "line": 24,
            "match": {
              "location": "features/step_definitions/pidgin.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 15594779255
            }
          },
          {
            "keyword": "When ",
            "name": "I start a conversation with my friend",
            "line": 25,
            "match": {
              "location": "features/step_definitions/pidgin.rb:170"
            },
            "result": {
              "status": "passed",
              "duration": 17104010121
            }
          },
          {
            "keyword": "And ",
            "name": "I say something to my friend",
            "line": 26,
            "match": {
              "location": "features/step_definitions/pidgin.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 16611374021
            }
          },
          {
            "keyword": "Then ",
            "name": "I receive a response from my friend",
            "line": 27,
            "match": {
              "location": "features/step_definitions/pidgin.rb:195"
            },
            "result": {
              "status": "passed",
              "duration": 16293715069
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 386776115
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1316666996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 1463420
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;using-a-persistent-pidgin-configuration",
        "keyword": "Scenario",
        "name": "Using a persistent Pidgin configuration",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 29
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15990
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5163183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2838344
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9326803405
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21173609
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 22249677580
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 59204327
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7477765188
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 10062142693
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1376730671
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 38,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 12385177578
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 563327273
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 40,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 16723266776
            }
          },
          {
            "keyword": "When ",
            "name": "I close Pidgin",
            "line": 41,
            "match": {
              "location": "features/step_definitions/pidgin.rb:240"
            },
            "result": {
              "status": "passed",
              "duration": 15746120644
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of the configured Pidgin accounts",
            "line": 42,
            "match": {
              "location": "features/step_definitions/pidgin.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 12823317
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 21558809030
            }
          },
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 106906039
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 92316879910
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin has the expected persistent accounts configured",
            "line": 46,
            "match": {
              "location": "features/step_definitions/pidgin.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 9022847
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 10088938832
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 48,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 16819137243
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"/usr/bin/pidgin\"",
            "line": 53,
            "comments": [
              {
                "value": "# Exercise Pidgin AppArmor profile with persistence enabled.",
                "line": 49
              },
              {
                "value": "# This should really be in dedicated scenarios, but it would be",
                "line": 50
              },
              {
                "value": "# too costly to set up the virtual USB drive with persistence more",
                "line": 51
              },
              {
                "value": "# than once in this feature.",
                "line": 52
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 462279724
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot add a certificate from the \"/home/amnesia/.gnupg\" directory to Pidgin",
            "line": 54,
            "match": {
              "location": "features/step_definitions/pidgin.rb:295"
            },
            "result": {
              "status": "passed",
              "duration": 46447744304
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/pidgin\" from opening \"/home/amnesia/.gnupg/test.crt\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 483302932
            }
          },
          {
            "keyword": "When ",
            "name": "I close Pidgin's certificate import failure dialog",
            "line": 56,
            "match": {
              "location": "features/step_definitions/pidgin.rb:308"
            },
            "result": {
              "status": "passed",
              "duration": 499863533
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's certificate manager",
            "line": 57,
            "match": {
              "location": "features/step_definitions/pidgin.rb:300"
            },
            "result": {
              "status": "passed",
              "duration": 829264890
            }
          },
          {
            "keyword": "Given ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/pidgin\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 91016080
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot add a certificate from the \"/live/persistence/TailsData_unlocked/gnupg\" directory to Pidgin",
            "line": 59,
            "match": {
              "location": "features/step_definitions/pidgin.rb:295"
            },
            "result": {
              "status": "passed",
              "duration": 56522775572
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/pidgin\" from opening \"/live/persistence/TailsData_unlocked/gnupg/test.crt\"",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 459653640
            }
          },
          {
            "keyword": "When ",
            "name": "I close Pidgin's certificate import failure dialog",
            "line": 61,
            "match": {
              "location": "features/step_definitions/pidgin.rb:308"
            },
            "result": {
              "status": "passed",
              "duration": 561273355
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's certificate manager",
            "line": 62,
            "match": {
              "location": "features/step_definitions/pidgin.rb:300"
            },
            "result": {
              "status": "passed",
              "duration": 1080134831
            }
          },
          {
            "keyword": "Then ",
            "name": "I can add a certificate from the \"/home/amnesia\" directory to Pidgin",
            "line": 63,
            "match": {
              "location": "features/step_definitions/pidgin.rb:286"
            },
            "result": {
              "status": "passed",
              "duration": 57203583116
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 8727481175
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1144088156
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 12985652
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 20991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 92524
            }
          }
        ],
        "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": 87284
            }
          },
          {
            "keyword": "Then ",
            "name": "no Qt5 package is installed",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 39188906
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 122862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5350
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 8496
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5904665
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 66583324
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 13037592
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1020637052
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1743"
            },
            "result": {
              "status": "passed",
              "duration": 15091287576
            }
          },
          {
            "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": 2687922481
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 62546529266
            }
          },
          {
            "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": 341424953
            }
          },
          {
            "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": 2568884737
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 11363699443
            }
          },
          {
            "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": 1067375594
            }
          },
          {
            "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": 2739245742
            }
          },
          {
            "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": 38893
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:890"
            },
            "result": {
              "status": "passed",
              "duration": 4138444034
            }
          },
          {
            "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": 2621283625
            }
          },
          {
            "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": 43902
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 217608835
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 204018485
            }
          }
        ]
      }
    ]
  },
  {
    "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;the-live-user-is-setup-correctly",
        "keyword": "Scenario",
        "name": "The live user is setup correctly",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 25067
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4145650
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7477916438
            }
          },
          {
            "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": 147249755
            }
          },
          {
            "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": 67678153
            }
          },
          {
            "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": 163043725
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 936269750
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21250
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-network-services",
        "keyword": "Scenario",
        "name": "No unexpected network services",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 10
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12614
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4278110
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11059912014
            }
          },
          {
            "keyword": "Then ",
            "name": "no unexpected services are listening for network connections",
            "line": 13,
            "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:170"
            },
            "result": {
              "status": "passed",
              "duration": 155831302
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1017265549
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31750
            }
          }
        ]
      },
      {
        "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": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12313
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3936988
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10380813529
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user can only access allowed local services",
            "line": 17,
            "output": [
              "amnesia could access tor on 127.0.0.1:5353 (UDP) 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",
              "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 not access tor on 127.0.0.1:9052 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9050 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9040 (TCP) as expected",
              "amnesia could access cupsd on 127.0.0.1:631 (TCP) as expected"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5418179363
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 968305200
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22191
            }
          }
        ]
      },
      {
        "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": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12844
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6718686
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6891455327
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 21,
            "match": {
              "location": "features/step_definitions/checks.rb:227"
            },
            "result": {
              "status": "passed",
              "duration": 108070569
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 884461069
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20247
            }
          }
        ]
      },
      {
        "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": 23,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15298
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5645228
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 24,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8786653953
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 25,
            "match": {
              "location": "features/step_definitions/checks.rb:227"
            },
            "result": {
              "status": "passed",
              "duration": 93677310
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 920538457
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 26219
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11522
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6383015
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10326911559
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 6,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 29633230620
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/home/amnesia/Persistent/Passwords.kdbx\" with contents \"\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1703"
            },
            "result": {
              "status": "passed",
              "duration": 7195543
            }
          },
          {
            "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:1707"
            },
            "result": {
              "status": "passed",
              "duration": 48037544
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 13368626563
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9996888717
            }
          },
          {
            "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": 2542890780
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 2025135703
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 26881
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15478
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 18061923
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8086954560
            }
          },
          {
            "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": 46461271
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 7828018707
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"MyPass.kdbx\" in Files",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 5685566870
            }
          },
          {
            "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": 3603445690
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1499439803
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25768
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12564
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4400590
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 12859931758
            }
          },
          {
            "keyword": "When ",
            "name": "I request a shutdown using the system menu",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:905"
            },
            "result": {
              "status": "passed",
              "duration": 3695809504
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:872"
            },
            "result": {
              "status": "passed",
              "duration": 18546842982
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 291285490
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19897
            }
          }
        ]
      },
      {
        "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": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 17202
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6526996
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10881212605
            }
          },
          {
            "keyword": "When ",
            "name": "I request a reboot using the system menu",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:905"
            },
            "result": {
              "status": "passed",
              "duration": 3494961046
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually restarts",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:872"
            },
            "result": {
              "status": "passed",
              "duration": 62466349501
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 4010754947
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22553
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18675
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4024773
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2282008
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11317498211
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 52113222
            }
          },
          {
            "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": 343706923
            }
          },
          {
            "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": 7895429024
            }
          },
          {
            "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": 1371063466
            }
          },
          {
            "keyword": "And ",
            "name": "I see that SSH is properly stream isolated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 6620492
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 356582980
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 937920123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 86332
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10580
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4626795
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3043869
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10744000707
            }
          }
        ]
      },
      {
        "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": 259762362
            }
          },
          {
            "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": 192608324
            }
          },
          {
            "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": 5879767044
            }
          },
          {
            "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": 1587919990
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 230387531
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 908771154
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 753644
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15670
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4693500
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2654218
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10828577079
            }
          },
          {
            "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": 54973527
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 4625631522
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 1781212510
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;no-add-ons-are-installed",
        "keyword": "Scenario",
        "name": "No add-ons are installed",
        "description": "",
        "line": 12,
        "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": 13,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 2395977653
            }
          },
          {
            "keyword": "When ",
            "name": "I open Thunderbird's Add-ons Manager",
            "line": 14,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1678456264
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Extensions tab",
            "line": 15,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:67"
            },
            "result": {
              "status": "passed",
              "duration": 1043060976
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that no add-ons are enabled in Thunderbird",
            "line": 16,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 10496762162
            }
          },
          {
            "keyword": "And ",
            "name": "no unexpected connection has leaked from Thunderbird",
            "line": 17,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:244"
            },
            "result": {
              "status": "passed",
              "duration": 1133169823
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 293647860
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1282956183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 96411
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13506
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5647805
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 4499284
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10648524078
            }
          },
          {
            "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": 45129509
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 4411034046
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 2576232220
            }
          }
        ]
      },
      {
        "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": 19,
        "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": 20,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:85"
            },
            "result": {
              "status": "passed",
              "duration": 9005321777
            }
          },
          {
            "keyword": "Then ",
            "name": "the autoconfiguration wizard's choice for the incoming server is secure IMAP",
            "line": 21,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 310664289
            }
          },
          {
            "keyword": "And ",
            "name": "the autoconfiguration wizard's choice for the outgoing server is secure SMTP",
            "line": 22,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 228410706
            }
          },
          {
            "keyword": "When ",
            "name": "I accept the autoconfiguration wizard's configuration",
            "line": 23,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 17454223919
            }
          },
          {
            "keyword": "And ",
            "name": "I send an email to myself",
            "line": 24,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 5972197545
            }
          },
          {
            "keyword": "And ",
            "name": "I fetch my email",
            "line": 25,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:127"
            },
            "result": {
              "status": "passed",
              "duration": 1281034603
            }
          },
          {
            "keyword": "Then ",
            "name": "I can find the email I sent to myself in my inbox",
            "line": 26,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5416604069
            }
          },
          {
            "keyword": "And ",
            "name": "the only connections have been made to my email server",
            "line": 27,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:252"
            },
            "result": {
              "status": "passed",
              "duration": 581510539
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 521214560
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1169556160
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 266220
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 21881
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 10204798
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7861685966
            }
          }
        ]
      },
      {
        "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:1142"
            },
            "result": {
              "status": "passed",
              "duration": 9177906321
            }
          },
          {
            "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:1208"
            },
            "result": {
              "status": "passed",
              "duration": 1786303306
            }
          },
          {
            "keyword": "When ",
            "name": "I plug a Wi-Fi adapter",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:1211"
            },
            "result": {
              "status": "passed",
              "duration": 608967077
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection suggests me to connect to Wi-Fi",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:1215"
            },
            "result": {
              "status": "passed",
              "duration": 877590090
            }
          },
          {
            "keyword": "And ",
            "name": "I click on the Wi-Fi settings",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:1220"
            },
            "result": {
              "status": "passed",
              "duration": 1110315323
            }
          },
          {
            "keyword": "And ",
            "name": "The Wi-Fi settings are displayed",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1224"
            },
            "result": {
              "status": "passed",
              "duration": 2434111832
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1063606496
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23083
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12844
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3905689
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7019573727
            }
          }
        ]
      },
      {
        "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:137"
            },
            "result": {
              "status": "passed",
              "duration": 18721232
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 720 seconds",
            "line": 37,
            "output": [
              "Slept for 720 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 720000147419
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 6804491618
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:738"
            },
            "result": {
              "status": "passed",
              "duration": 39496382
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1109845023
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23193
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13676
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 9200080
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7595292777
            }
          }
        ]
      },
      {
        "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:137"
            },
            "result": {
              "status": "passed",
              "duration": 37620707
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2788656322
            }
          },
          {
            "keyword": "And ",
            "name": "I look at the hide mode but then I go back",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:517"
            },
            "result": {
              "status": "passed",
              "duration": 3839685318
            }
          },
          {
            "keyword": "And ",
            "name": "I choose to connect to Tor automatically",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1166263997
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection does not propose me to use Tor bridges",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:860"
            },
            "result": {
              "status": "passed",
              "duration": 103440170
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 655848449
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 98605
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 24666
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 22785865
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7048965474
            }
          }
        ]
      },
      {
        "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:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1368421927
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13432154
            }
          },
          {
            "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": 1178619205
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1392562548
            }
          },
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1512642769
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1149132634
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:423"
            },
            "result": {
              "status": "passed",
              "duration": 26887021389
            }
          },
          {
            "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:435"
            },
            "result": {
              "status": "passed",
              "duration": 10705649880
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that there might be a captive portal",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:441"
            },
            "result": {
              "status": "passed",
              "duration": 148722103
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Unsafe Browser from Tor Connection",
            "line": 60,
            "match": {
              "location": "features/step_definitions/tor.rb:1176"
            },
            "result": {
              "status": "passed",
              "duration": 11258999689
            }
          },
          {
            "keyword": "And ",
            "name": "I log-in to the Captive Portal",
            "line": 61,
            "match": {
              "location": "features/step_definitions/browser.rb:470"
            },
            "result": {
              "status": "passed",
              "duration": 6340622404
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 123238698
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1563949695
            }
          },
          {
            "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": 56160829
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1112968079
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 4924190879
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 999314053
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 849938
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13445
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3633969
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11182771864
            }
          },
          {
            "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": 47805466
            }
          },
          {
            "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": 176460644
            }
          },
          {
            "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:133"
            },
            "result": {
              "status": "passed",
              "duration": 58404346
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to block all external IPv6 traffic",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 47058713
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 671748296
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24887
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12844
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3491382
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11011863233
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 12966891
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 8407575249
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 7411731205
            }
          },
          {
            "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": 373109717
            }
          },
          {
            "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": 423929649
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 694470938
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 47221739
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15791
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3523663
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11199873443
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 6303046
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 27,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 146962923
            }
          },
          {
            "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": 310880383
            }
          },
          {
            "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": 46197364
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1161671237
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 55592401
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15158
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6863299
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10652783858
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 7772749
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 34,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 122557204
            }
          },
          {
            "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": 1069905289
            }
          },
          {
            "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": 72537407
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1322132666
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58416578
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18203
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5268401
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10718156880
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3545094
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 41,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 136686088
            }
          },
          {
            "keyword": "When ",
            "name": "I send some ICMP pings",
            "line": 42,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4088288108
            }
          },
          {
            "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": 100250441
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 670482126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50105248
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-tcp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified TCP 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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19589
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3634110
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2214782
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10947598099
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified TCP connection to 1.2.3.4 on port 42",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 1473168074
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 44113
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 83734781
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 207377325
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1070813398
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 83788
            }
          }
        ]
      },
      {
        "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": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16761
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5563024
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 6016819
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10818954677
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified UDP connection to 1.2.3.4 on port 42",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 1255497581
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 48421
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 98268977
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 237221774
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1034988346
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 94348
            }
          }
        ]
      },
      {
        "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": 60,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 59
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16040
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6045853
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2776648
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11005431615
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified ICMP connection to 1.2.3.4",
            "line": 62,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 5385918545
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 318287
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 64,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 88306773
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 224534679
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1042806526
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 85260
            }
          }
        ]
      },
      {
        "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": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15429
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6243834
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 67,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7696456121
            }
          },
          {
            "keyword": "And ",
            "name": "the system DNS is using the local DNS resolver",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:271"
            },
            "result": {
              "status": "passed",
              "duration": 11751035
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 22782598
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 10848969038
            }
          },
          {
            "keyword": "Then ",
            "name": "the system DNS is still using the local DNS resolver",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:271"
            },
            "result": {
              "status": "passed",
              "duration": 4990799
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 733933638
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21010
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12954
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5440855
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 4457096
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10832732289
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 58695752
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-security-check",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:346"
            },
            "result": {
              "status": "passed",
              "duration": 135457577
            }
          },
          {
            "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:327"
            },
            "result": {
              "status": "passed",
              "duration": 10009983935
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 285473775
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1464852196
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 82605
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 36678
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 24451082
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 24190944
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10772361686
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 46781581
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run htpdate",
            "line": 18,
            "match": {
              "location": "features/step_definitions/tor.rb:353"
            },
            "result": {
              "status": "passed",
              "duration": 2444963430
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that htpdate is properly stream isolated",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 7926386
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 246230472
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 775764760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 252254
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11271
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4564038
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2013814
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10652804928
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 64814882
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-upgrade-frontend-wrapper",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:360"
            },
            "result": {
              "status": "passed",
              "duration": 33452241798
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-upgrade-frontend-wrapper is properly stream isolated",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 6351366
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 344161759
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1305485651
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 84611
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3722836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2168987
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10450174395
            }
          }
        ]
      },
      {
        "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:315"
            },
            "result": {
              "status": "passed",
              "duration": 67520646
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 14233624870
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 11109166039
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 31,
            "match": {
              "location": "features/step_definitions/browser.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 454166499
            }
          },
          {
            "keyword": "And ",
            "name": "I see that Tor Browser is properly stream isolated",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 63854346
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 878698442
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1151621726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 366600
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 24316
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6684032
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10689434075
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 1030262056
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 8668692
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 11,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 10271729847
            }
          },
          {
            "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:1337"
            },
            "result": {
              "status": "passed",
              "duration": 4721898885
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser shows the \"Unable to connect\" error",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:376"
            },
            "result": {
              "status": "failed",
              "error_message": "try_for() timeout expired (Timeout::Error)\n./features/support/helpers/misc_helpers.rb:145:in `rescue in try_for'\n./features/support/helpers/misc_helpers.rb:51:in `try_for'\n./features/step_definitions/browser.rb:383:in `/^the (Tor|Unsafe) Browser shows the \"([^\"]+)\" error$/'\nfeatures/torified_browsing.feature:13:in `Then the Tor Browser shows the \"Unable to connect\" error'",
              "duration": 60001377889
            }
          },
          {
            "keyword": "And ",
            "name": "no traffic was sent to the web server on the LAN",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1341"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'The Tor Browser cannot access the LAN' (at time 03:31:16)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_devel/4310/artifact/build-artifacts/03:31:16_The_Tor_Browser_cannot_access_the_LAN.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_devel/4310/artifact/build-artifacts/03:31:16_The_Tor_Browser_cannot_access_the_LAN.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_devel/4310/artifact/build-artifacts/03:31:16_The_Tor_Browser_cannot_access_the_LAN.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_devel/4310/artifact/build-artifacts/03:31:16_The_Tor_Browser_cannot_access_the_LAN.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 5425787003
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53735448
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 28293
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5868269
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 6947268
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11005099997
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 76908869
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 15197218380
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9139372941
            }
          },
          {
            "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:649"
            },
            "result": {
              "status": "passed",
              "duration": 4390485349
            }
          },
          {
            "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:638"
            },
            "result": {
              "status": "passed",
              "duration": 3188056422
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 316899338
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1008691892
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 90149
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13936
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4719960
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 6033800
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10980481358
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 10263371051
            }
          },
          {
            "keyword": "When ",
            "name": "I download some file in the Tor Browser to the Downloads directory",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:338"
            },
            "result": {
              "status": "passed",
              "duration": 12574790414
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Downloads directory",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:359"
            },
            "result": {
              "status": "passed",
              "duration": 591620384
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 600772112
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1008408805
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 202932
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14327
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3787167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1922472
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10633717097
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 35,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 8895408173
            }
          },
          {
            "keyword": "Then ",
            "name": "I can listen to an Ogg audio track in Tor Browser",
            "line": 36,
            "match": {
              "location": "features/step_definitions/browser.rb:400"
            },
            "result": {
              "status": "passed",
              "duration": 37795035936
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 8133056380
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1645020985
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 2925047
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16341
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5922842
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2682391
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10793008417
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 41,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 15040927936
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video in Tor Browser",
            "line": 42,
            "match": {
              "location": "features/step_definitions/browser.rb:419"
            },
            "result": {
              "status": "passed",
              "duration": 7437241463
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 297285521
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 830248001
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 85773
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 18827
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 7254504
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10796582883
            }
          },
          {
            "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:1015"
            },
            "result": {
              "status": "passed",
              "duration": 80648876
            }
          },
          {
            "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:1015"
            },
            "result": {
              "status": "passed",
              "duration": 47746051
            }
          },
          {
            "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:1015"
            },
            "result": {
              "status": "passed",
              "duration": 43424921
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 38582790
            }
          },
          {
            "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:984"
            },
            "result": {
              "status": "passed",
              "duration": 42899123
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 26159472
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/tmp/synaptic.html\" exists",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 49552527
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"torbrowser_firefox\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 144930014
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 14103285745
            }
          },
          {
            "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:210"
            },
            "result": {
              "status": "passed",
              "duration": 7770666656
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 429955883
            }
          },
          {
            "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:1370"
            },
            "result": {
              "status": "passed",
              "duration": 47276508
            }
          },
          {
            "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:210"
            },
            "result": {
              "status": "passed",
              "duration": 3999481628
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 359790156
            }
          },
          {
            "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:210"
            },
            "result": {
              "status": "passed",
              "duration": 4204546975
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 363398088
            }
          },
          {
            "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:210"
            },
            "result": {
              "status": "passed",
              "duration": 5053567222
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 443916029
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///tmp/synaptic.html\" in the Tor Browser",
            "line": 64,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 4579645790
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 457744738
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 746898244
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23565
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15389
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3829046
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10240542407
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 69,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9858018250
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser uses all expected TBB shared libraries",
            "line": 70,
            "match": {
              "location": "features/step_definitions/browser.rb:306"
            },
            "result": {
              "status": "passed",
              "duration": 1016730320
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 711305432
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25759
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 21432
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6772278
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 5650670
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10982407238
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 10472771790
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://example.com/\" in the Tor Browser",
            "line": 76,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 7460794263
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"Example Domain\" heading on the \"Example Domain\" page",
            "line": 77,
            "match": {
              "location": "features/step_definitions/browser.rb:388"
            },
            "result": {
              "status": "passed",
              "duration": 163583599
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 2 tabs open",
            "line": 78,
            "match": {
              "location": "features/step_definitions/browser.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 80910267
            }
          },
          {
            "keyword": "When ",
            "name": "I request a new identity in Tor Browser",
            "line": 79,
            "match": {
              "location": "features/step_definitions/browser.rb:664"
            },
            "result": {
              "status": "passed",
              "duration": 3238543118
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads about:tor",
            "line": 80,
            "match": {
              "location": "features/step_definitions/browser.rb:521"
            },
            "result": {
              "status": "passed",
              "duration": 2046229952
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 1 tab open",
            "line": 81,
            "match": {
              "location": "features/step_definitions/browser.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 81899396
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 267772695
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1716896733
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 91112
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12443
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6028890
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10754865846
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 88,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 11216705006
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 89,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 10649627294
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 90,
            "match": {
              "location": "features/step_definitions/browser.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 610179961
            }
          },
          {
            "keyword": "And ",
            "name": "Tor Browser's circuit view is working",
            "line": 91,
            "match": {
              "location": "features/step_definitions/browser.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 1439432234
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1421159061
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28765
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 22943
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6311973
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10661115339
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 95,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9614655832
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://net.ipcalf.com/\" in the Tor Browser",
            "line": 96,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 7354774922
            }
          },
          {
            "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:394"
            },
            "result": {
              "status": "passed",
              "duration": 119034675
            }
          },
          {
            "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:210"
            },
            "result": {
              "status": "passed",
              "duration": 7492948381
            }
          },
          {
            "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:388"
            },
            "result": {
              "status": "passed",
              "duration": 245685535
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1101977071
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21590
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13966
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4370853
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 9161384167
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17586180
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:661"
            },
            "result": {
              "status": "passed",
              "duration": 22368756254
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 49002823
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 7279509301
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Persistent directory",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 15499737372
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 108,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 10311686356
            }
          },
          {
            "keyword": "And ",
            "name": "I download some file in the Tor Browser to the Persistent directory",
            "line": 109,
            "match": {
              "location": "features/step_definitions/browser.rb:338"
            },
            "result": {
              "status": "passed",
              "duration": 12419843814
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Persistent directory",
            "line": 110,
            "match": {
              "location": "features/step_definitions/browser.rb:359"
            },
            "result": {
              "status": "passed",
              "duration": 1184424891
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://tails.net/about\" in the Tor Browser",
            "line": 111,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 11142628516
            }
          },
          {
            "keyword": "Then ",
            "name": "\"Tails - How Tails works\" has loaded in the Tor Browser",
            "line": 112,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 520005639
            }
          },
          {
            "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:638"
            },
            "result": {
              "status": "passed",
              "duration": 9277862550
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1626085897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28293
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 20579
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3541856
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 123,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7689831047
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 81108981
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 15388200496
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 13844754782
            }
          },
          {
            "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:649"
            },
            "result": {
              "status": "passed",
              "duration": 7051824971
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 896365570
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23214
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12495
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5483887
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7162173619
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 73629503
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 15760355610
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 11699815276
            }
          },
          {
            "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:649"
            },
            "result": {
              "status": "passed",
              "duration": 7456282456
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 911866150
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21821
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 16010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4738806
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 125,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6828662473
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 48821152
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 15875854252
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 13642570755
            }
          },
          {
            "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:649"
            },
            "result": {
              "status": "passed",
              "duration": 7542545337
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1064804429
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23244
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 13305
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5167962
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 126,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7557765179
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 74452951
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 15630765109
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 12711321382
            }
          },
          {
            "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:649"
            },
            "result": {
              "status": "passed",
              "duration": 6989342171
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1136972953
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 114345
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 33243
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 9752218
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7552812408
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1245"
            },
            "result": {
              "status": "passed",
              "duration": 117308419
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1249"
            },
            "result": {
              "status": "passed",
              "duration": 15781105776
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 13664447154
            }
          },
          {
            "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:649"
            },
            "result": {
              "status": "passed",
              "duration": 7741240636
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1153175164
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20558
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15389
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5210733
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 8301232037
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1539641755
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 132,
            "match": {
              "location": "features/step_definitions/usb.rb:973"
            },
            "result": {
              "status": "passed",
              "duration": 199410154
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 133,
            "match": {
              "location": "features/step_definitions/usb.rb:990"
            },
            "result": {
              "status": "passed",
              "duration": 439588265
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1018"
            },
            "result": {
              "status": "passed",
              "duration": 2154875724
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser in offline mode",
            "line": 135,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 18168463985
            }
          },
          {
            "keyword": "And ",
            "name": "I add a bookmark to eff.org in the Tor Browser",
            "line": 136,
            "match": {
              "location": "features/step_definitions/browser.rb:621"
            },
            "result": {
              "status": "passed",
              "duration": 8728853709
            }
          },
          {
            "keyword": "And ",
            "name": "I cold reboot the computer",
            "line": 137,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 10958032764
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 40965734583
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 7710582820
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 140,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 10628750913
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 141,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8534208658
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser in offline mode",
            "line": 142,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 8589804962
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has a bookmark to eff.org",
            "line": 143,
            "match": {
              "location": "features/step_definitions/browser.rb:633"
            },
            "result": {
              "status": "passed",
              "duration": 1019736004
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 681765481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8238733
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 25959
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3337021
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3153155
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 12260729601
            }
          }
        ]
      },
      {
        "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": 6014775779
            }
          },
          {
            "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": 184909251
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 233699836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1063027782
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 90731
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16221
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4985169
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 4287878
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11012717727
            }
          }
        ]
      },
      {
        "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": 231912986
            }
          },
          {
            "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": 9861245009
            }
          },
          {
            "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": 207680207
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 256481950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 713435298
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 128132
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 30026
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 7035101
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 7039119
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10604410492
            }
          }
        ]
      },
      {
        "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": 208890637
            }
          },
          {
            "keyword": "Then ",
            "name": "the wget command is successful",
            "line": 9,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 49403
            }
          },
          {
            "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": 24757
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 220459373
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 831253210
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 233359
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 26560
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 9419672
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 6309808
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11706455911
            }
          }
        ]
      },
      {
        "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": 178197879
            }
          },
          {
            "keyword": "Then ",
            "name": "the curl command is successful",
            "line": 14,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 62728
            }
          },
          {
            "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": 43923
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 231386039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 747913782
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 90811
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/totem.feature",
    "id": "using-totem",
    "keyword": "Feature",
    "name": "Using Totem",
    "description": "  As a Tails user\n  I want to watch local and remote videos in Totem\n  And AppArmor should prevent Totem from doing dangerous things\n  And all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12023
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3324067
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 9,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 190039269
            }
          }
        ]
      },
      {
        "id": "using-totem;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": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7579577462
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 13,
            "match": {
              "location": "features/step_definitions/totem.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 8164975438
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia\" as user \"amnesia\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 50464863
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/video.mp4\" exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 37408237
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 95827658
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/video.mp4\" with Totem",
            "line": 17,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4958396628
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"SampleLocalMp4VideoFrame.png\" after at most 40 seconds",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 2300155709
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has not denied \"/usr/bin/totem\" from opening \"/home/amnesia/video.mp4\"",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 56088130
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 20,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 137393830
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/.gnupg\" as user \"amnesia\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 60044004
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/.gnupg/video.mp4\" exists",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 52316933
            }
          },
          {
            "keyword": "And ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 116152002
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/home/amnesia/.gnupg/video.mp4\" with Totem",
            "line": 24,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2083070364
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 25,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 909261479
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/home/amnesia/.gnupg/video.mp4\"",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 61842072
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 27,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 119443528
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/video.mp4\" exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 55544349
            }
          },
          {
            "keyword": "And ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 110564212
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/video.mp4\" with Totem",
            "line": 30,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2016320961
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 31,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 708519776
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/usr/lib/live/mount/overlay/rw/home/amnesia/.gnupg/video.mp4\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 43282025
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 33,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 119299257
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/video.mp4\" exists",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 42398414
            }
          },
          {
            "keyword": "And ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 84315766
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/live/overlay/rw/home/amnesia/.gnupg/video.mp4\" with Totem",
            "line": 36,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2018554626
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 37,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 747154749
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/usr/lib/live/mount/overlay/rw/home/amnesia/.gnupg/video.mp4\"",
            "line": 40,
            "comments": [
              {
                "value": "# Due to our AppArmor aliases, /live/overlay will be treated",
                "line": 38
              },
              {
                "value": "# as /usr/lib/live/mount/overlay.",
                "line": 39
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 60092415
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 41,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 126563888
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/home/amnesia/video.mp4\" to \"/home/amnesia/.purple/otr.private_key\" as user \"amnesia\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1015"
            },
            "result": {
              "status": "passed",
              "duration": 59800966
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/.purple/otr.private_key\" exists",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:984"
            },
            "result": {
              "status": "passed",
              "duration": 48876779
            }
          },
          {
            "keyword": "And ",
            "name": "I restart monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 87161343
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/home/amnesia/.purple/otr.private_key\" with Totem",
            "line": 45,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2065210888
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 46,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 687611607
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/home/amnesia/.purple/otr.private_key\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 64834085
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 587286367
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 567276
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11132
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3835337
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1877208
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 9,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 137894010
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-a-webm-video-over-https",
        "keyword": "Scenario",
        "name": "Watching a WebM video over HTTPS",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 49
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 51,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10566627060
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video over HTTPs",
            "line": 52,
            "match": {
              "location": "features/step_definitions/totem.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 9444168045
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 403420198
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1564988026
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 173477
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4778810
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 9,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 187822856
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-mp4-videos-stored-on-the-persistent-volume-should-work-as-expected-given-our-apparmor-confinement",
        "keyword": "Scenario",
        "name": "Watching MP4 videos stored on the persistent volume should work as expected given our AppArmor confinement",
        "description": "",
        "line": 54,
        "type": "scenario",
        "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": 55,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8167577561
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 56,
            "match": {
              "location": "features/step_definitions/totem.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 8119822070
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 66308046
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/video.mp4\" with Totem",
            "line": 58,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4976454173
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"SampleLocalMp4VideoFrame.png\" after at most 40 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 1973509638
            }
          },
          {
            "keyword": "Given ",
            "name": "I close Totem",
            "line": 60,
            "match": {
              "location": "features/step_definitions/totem.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 124048904
            }
          },
          {
            "keyword": "And ",
            "name": "I start monitoring the AppArmor log of \"/usr/bin/totem\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1357"
            },
            "result": {
              "status": "passed",
              "duration": 170428711
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/.gnupg\" as user \"amnesia\"",
            "line": 62,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 60090132
            }
          },
          {
            "keyword": "When ",
            "name": "I try to open \"/home/amnesia/.gnupg/video.mp4\" with Totem",
            "line": 63,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 2031903624
            }
          },
          {
            "keyword": "Then ",
            "name": "Totem tells me it is not allowed to open this file",
            "line": 64,
            "match": {
              "location": "features/step_definitions/totem.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 806822495
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has denied \"/usr/bin/totem\" from opening \"/home/amnesia/.gnupg/video.mp4\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 67781335
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1188354312
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 733138
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15178
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5568273
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 7826978286
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the Unsafe Browser",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:581"
            },
            "result": {
              "status": "passed",
              "duration": 8037714804
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 14769887436
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16410619
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8807576114
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 124403170
            }
          },
          {
            "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": 1270318768
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1220015737
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21731
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12684
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4024194
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10632620706
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 1035405328
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 9186533077
            }
          },
          {
            "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:1337"
            },
            "result": {
              "status": "passed",
              "duration": 4667112489
            }
          },
          {
            "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": 155094887
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 930829361
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 785586
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14798
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4980440
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10856568322
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 26,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 10324698472
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser runs as the expected user",
            "line": 27,
            "match": {
              "location": "features/step_definitions/browser.rb:324"
            },
            "result": {
              "status": "passed",
              "duration": 865195844
            }
          },
          {
            "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": 480401871
            }
          },
          {
            "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": 513225392
            }
          },
          {
            "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": 5498042298
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no bookmarks",
            "line": 31,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 4186641470
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser uses all expected TBB shared libraries",
            "line": 32,
            "match": {
              "location": "features/step_definitions/browser.rb:306"
            },
            "result": {
              "status": "passed",
              "duration": 974728619
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 617171120
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20518
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15739
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4175325
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10921958974
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 37,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 9598549660
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 38,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 7399928264
            }
          },
          {
            "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": 444108139
            }
          },
          {
            "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": 55496570
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1225655965
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21480
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 14928
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3825600
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 11006751986
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 7873090510
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 120913444
            }
          },
          {
            "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:625"
            },
            "result": {
              "status": "passed",
              "duration": 1069037044
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser chroot is torn down",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 123274311
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1140302177
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40927
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12755
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 10926753
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10850717757
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 9223577781
            }
          },
          {
            "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:1347"
            },
            "result": {
              "status": "passed",
              "duration": 10000165350
            }
          },
          {
            "keyword": "And ",
            "name": "I try to start the Unsafe Browser",
            "line": 59,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 59348249
            }
          },
          {
            "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": 1182756292
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1397502059
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23233
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15459
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5281826
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10471334098
            }
          },
          {
            "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": 100165293
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 65,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 9069231617
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 66,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 3989219113
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser shows the \"The proxy server is refusing connections\" error",
            "line": 67,
            "match": {
              "location": "features/step_definitions/browser.rb:376"
            },
            "result": {
              "status": "passed",
              "duration": 138293867
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1267234119
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22181
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 12023
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4361436
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2084446
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10985630273
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4065050
            }
          },
          {
            "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": 20063244
            }
          },
          {
            "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": 5665135
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 8442985296
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 120 seconds",
            "line": 76,
            "output": [
              "Slept for 120 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1347"
            },
            "result": {
              "status": "passed",
              "duration": 120002339649
            }
          },
          {
            "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": 580974625
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 390895129
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 985017872
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58325308
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19737
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6198087
            }
          }
        ],
        "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:172"
            },
            "result": {
              "status": "passed",
              "duration": 10942980193
            }
          },
          {
            "keyword": "And ",
            "name": "the network is unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 10473683
            }
          },
          {
            "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:1347"
            },
            "result": {
              "status": "passed",
              "duration": 10000160452
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 85,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 107649661
            }
          },
          {
            "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": 4222488947
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1269959539
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 25859
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 15117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3831872
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7490139022
            }
          }
        ]
      },
      {
        "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": 10845119713
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 1848538968
            }
          },
          {
            "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": 5060333938
            }
          },
          {
            "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": 1648890479
            }
          },
          {
            "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": 324426110
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 18,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1269381767
            }
          },
          {
            "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": 109052337
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 687840004
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 288061
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11191
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3541415
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7672315832
            }
          }
        ]
      },
      {
        "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": 20022181935
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 1511606402
            }
          },
          {
            "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": 6340486693
            }
          },
          {
            "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": 1911977692
            }
          },
          {
            "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": 320813309
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 27,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1282990076
            }
          },
          {
            "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": 101522887
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 705600392
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 318357
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13635
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6315337
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7044564618
            }
          }
        ]
      },
      {
        "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": 8649498263
            }
          },
          {
            "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": 6813762480
            }
          },
          {
            "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": 2345955160
            }
          },
          {
            "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": 300705723
            }
          },
          {
            "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": 1336240066
            }
          },
          {
            "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": 110182051
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 753913085
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 446660
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12644
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3645320
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7116526868
            }
          }
        ]
      },
      {
        "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": 27761869040
            }
          },
          {
            "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": 8762296751
            }
          },
          {
            "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": 2088852004
            }
          },
          {
            "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": 332745094
            }
          },
          {
            "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": 1333810204
            }
          },
          {
            "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": 120695639
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 791161297
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13916442
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 32181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 7162059
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7389230607
            }
          }
        ]
      },
      {
        "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": 20362129313
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 1475706537
            }
          },
          {
            "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": 10319835906
            }
          },
          {
            "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": 2153633310
            }
          },
          {
            "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": 344126935
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 54,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1329704072
            }
          },
          {
            "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": 104557752
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 933388993
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 299163
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6353711
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7046541535
            }
          }
        ]
      },
      {
        "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": 19991515462
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:837"
            },
            "result": {
              "status": "passed",
              "duration": 1461348949
            }
          },
          {
            "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": 8241837683
            }
          },
          {
            "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": 2030552243
            }
          },
          {
            "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": 349303182
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 63,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1263227869
            }
          },
          {
            "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": 105272745
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 815884303
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 284595
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12964
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3738166
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7240470244
            }
          }
        ]
      },
      {
        "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": 28303778167
            }
          },
          {
            "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": 19341329907
            }
          },
          {
            "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": 2058845208
            }
          },
          {
            "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": 119179820
            }
          },
          {
            "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": 1232123727
            }
          },
          {
            "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": 124770237
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 891571552
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13334569
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16110
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6014322
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7306817509
            }
          }
        ]
      },
      {
        "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": 27770972628
            }
          },
          {
            "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": 19802349708
            }
          },
          {
            "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": 1954277733
            }
          },
          {
            "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": 141700523
            }
          },
          {
            "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": 1258704274
            }
          },
          {
            "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": 130060448
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 903429336
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11491244
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 22431
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6443459
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7213366015
            }
          }
        ]
      },
      {
        "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": 8889209090
            }
          },
          {
            "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": 16881501978
            }
          },
          {
            "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": 1770202079
            }
          },
          {
            "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": 115218096
            }
          },
          {
            "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": 1252547966
            }
          },
          {
            "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": 91545047
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1073345587
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 491474
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 11131
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6019482
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 6465400
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 72808607
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:198"
            },
            "result": {
              "status": "passed",
              "duration": 23394
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 845023679
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 36744883811
            }
          },
          {
            "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": 369554092
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 8881603656
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8437454679
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 11908059
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4720709436
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 31125839309
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:691"
            },
            "result": {
              "status": "passed",
              "duration": 1321047759
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:744"
            },
            "result": {
              "status": "passed",
              "duration": 3202112084
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1706982106
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 853574450
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17475070
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 38492
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 10679941
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 75440734
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:198"
            },
            "result": {
              "status": "passed",
              "duration": 29545
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 803879359
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 36644539281
            }
          },
          {
            "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": 424425843
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:510"
            },
            "result": {
              "status": "passed",
              "duration": 7950709598
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:748"
            },
            "result": {
              "status": "passed",
              "duration": 8499171080
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 48152903
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4699930791
            }
          }
        ]
      },
      {
        "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:616"
            },
            "result": {
              "status": "passed",
              "duration": 4642631533
            }
          },
          {
            "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:926"
            },
            "result": {
              "status": "passed",
              "duration": 238029543
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 835167330
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9339792
            }
          }
        ]
      }
    ]
  },
  {
    "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 19166
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3567684
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7417557183
            }
          },
          {
            "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:1786"
            },
            "result": {
              "status": "passed",
              "duration": 117150439
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 778681297
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 27151
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 17132
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5015506
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7188536040
            }
          },
          {
            "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:1781"
            },
            "result": {
              "status": "passed",
              "duration": 1072644043
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 988609861
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22291
            }
          }
        ]
      },
      {
        "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:266"
            },
            "result": {
              "status": "passed",
              "duration": 26129
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5277928
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7379595435
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"WhisperBack\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1142"
            },
            "result": {
              "status": "passed",
              "duration": 8897581281
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack has debugging information",
            "line": 19,
            "match": {
              "location": "features/step_definitions/whisperback.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 2269701957
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1174751151
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32311
            }
          }
        ]
      }
    ]
  }
]