[
  {
    "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": 22302
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 23118123
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 579536172
            }
          },
          {
            "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": 34733185
            }
          },
          {
            "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": 5395927312
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"swap\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1015155661
            }
          },
          {
            "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": 7777769
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"live_hd\"",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 12516662756
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"live_hd\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1024083096
            }
          },
          {
            "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": 49950956948
            }
          },
          {
            "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": 61184307
            }
          },
          {
            "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": 54976980
            }
          },
          {
            "keyword": "But ",
            "name": "Tails has no disk swap enabled",
            "line": 17,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 43098726
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is not mounted",
            "line": 18,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 49314998
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 534945066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 112646808
            }
          }
        ]
      },
      {
        "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": 14697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1277294
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 44423559
            }
          },
          {
            "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": 6684831
            }
          },
          {
            "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": 17394069614
            }
          },
          {
            "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": 1020064292
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 701186946
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 33013254090
            }
          },
          {
            "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": 73452332
            }
          },
          {
            "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": 12580096834
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1171425712
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6859519
            }
          }
        ]
      },
      {
        "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": 16191
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1482779
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 52710884
            }
          },
          {
            "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": 8458766
            }
          },
          {
            "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": 17620606568
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"fake_TailsData\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1018960605
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 716420900
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 32774397540
            }
          },
          {
            "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": 358156069
            }
          },
          {
            "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": 12599234021
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 788429232
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7000122
            }
          }
        ]
      },
      {
        "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": 12153
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1299876
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 61386057
            }
          },
          {
            "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": 7165632
            }
          },
          {
            "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": 2648077581
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"gpt_ext2\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1017566285
            }
          },
          {
            "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": 10921001
            }
          },
          {
            "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": 2660242886
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"msdos_fat32\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1020780040
            }
          },
          {
            "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": 49502403529
            }
          },
          {
            "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": 64169816
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"gpt_ext2\" is not mounted",
            "line": 50,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 51208991
            }
          },
          {
            "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": 64285694
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is not mounted",
            "line": 52,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 41054816
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 577104249
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6073935
            }
          }
        ]
      }
    ]
  },
  {
    "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": 13486
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1380408
            }
          }
        ],
        "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": 80605311910
            }
          },
          {
            "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": 69692760
            }
          },
          {
            "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": 92532543
            }
          },
          {
            "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": 5744984323
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 768805214
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5670820
            }
          }
        ]
      },
      {
        "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": 16451
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1935439
            }
          }
        ],
        "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": 45826884430
            }
          },
          {
            "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": 74798562
            }
          },
          {
            "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": 197261644
            }
          },
          {
            "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": 16155458010
            }
          },
          {
            "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": 29326457516
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 689463119
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18274
            }
          }
        ]
      }
    ]
  },
  {
    "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": 14879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1715085
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1626047
            }
          }
        ],
        "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": 6433943977
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20925617
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 13244632484
            }
          },
          {
            "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": 50402162
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 181562199
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 812144500
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 81634
            }
          }
        ]
      },
      {
        "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": 11030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1705186
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1320366
            }
          }
        ],
        "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": 6563098850
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18849114
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1836722951
            }
          },
          {
            "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": 10994872030
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 979456526
            }
          },
          {
            "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": 42251614
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 128594548
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 669807902
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 81242
            }
          }
        ]
      },
      {
        "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": 11902
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2059149
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1370248
            }
          }
        ],
        "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": 6555114051
            }
          },
          {
            "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": 213276539
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2535843
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17089376
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2324902185
            }
          },
          {
            "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": 11846505037
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1282149205
            }
          },
          {
            "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": 53848734
            }
          },
          {
            "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": 246525879
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 152357574
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1115560544
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32803742
            }
          }
        ]
      },
      {
        "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": 19757
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2320470
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2996718
            }
          }
        ],
        "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": 6623975411
            }
          },
          {
            "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": 179559266
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:933"
            },
            "result": {
              "status": "passed",
              "duration": 5290357
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 50629200868
            }
          },
          {
            "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": 570383577
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 82362034
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 634555502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9423875
            }
          }
        ]
      },
      {
        "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": 14066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1557630
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3583759
            }
          }
        ],
        "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": 6617337559
            }
          },
          {
            "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": 1656335144
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:933"
            },
            "result": {
              "status": "passed",
              "duration": 6153125
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 51349709207
            }
          },
          {
            "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": 632429182
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 72452477
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 904264441
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 43344071
            }
          }
        ]
      },
      {
        "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": 19156
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2862146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3143704
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53203783
            }
          },
          {
            "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": 8902118
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 772619152
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 33568966421
            }
          },
          {
            "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": 42748296
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 68045998
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 755853704
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5660562
            }
          }
        ]
      },
      {
        "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": 16201
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1642500
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1523375
            }
          }
        ],
        "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": 6844879991
            }
          },
          {
            "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": 1088001455
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17182820
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 19174157858
            }
          },
          {
            "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": 61877054
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 267373816
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 793164848
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 882664
            }
          }
        ]
      },
      {
        "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": 11031
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3616480
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3444496
            }
          }
        ],
        "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": 6658449500
            }
          },
          {
            "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": 185580297
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 3613192287
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2384529
            }
          },
          {
            "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": 71469495
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14320144
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2264830394
            }
          },
          {
            "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": 4632614874
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1221833635
            }
          },
          {
            "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": 15835712105
            }
          },
          {
            "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": 14634635546
            }
          },
          {
            "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": 497522552
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1119772440
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 5071854912
            }
          },
          {
            "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": 258116398
            }
          },
          {
            "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": 43065823
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 201787414
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 936257409
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51877561
            }
          }
        ]
      },
      {
        "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": 16340
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2887123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3063842
            }
          }
        ],
        "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": 6591671387
            }
          },
          {
            "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": 170235597
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 3412979503
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2231864
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18755249
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 88,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2196928245
            }
          },
          {
            "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": 4081634692
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 91,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1217207491
            }
          },
          {
            "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": 11541868586
            }
          },
          {
            "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": 14890817579
            }
          },
          {
            "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": 449233190
            }
          },
          {
            "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": 245420686
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1146107759
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 6133985849
            }
          },
          {
            "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": 310103091
            }
          },
          {
            "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": 46183547
            }
          },
          {
            "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": 288262518
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 182676654
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 807388261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34072935
            }
          }
        ]
      },
      {
        "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": 15217
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1901465
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1291752
            }
          }
        ],
        "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": 6628652040
            }
          },
          {
            "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": 1087248699
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13978255
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 7262675687
            }
          },
          {
            "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": 139241
            }
          },
          {
            "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": 324247698
            }
          },
          {
            "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": 275257
            }
          },
          {
            "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": 3464004
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 204635898
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 721491184
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 775344
            }
          }
        ]
      }
    ]
  },
  {
    "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": 12524
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1841974
            }
          }
        ],
        "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": 6526571552
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3985272
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18375337
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2377782097
            }
          }
        ]
      },
      {
        "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": 10829159090
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1312957348
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6050963
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1096979367
            }
          },
          {
            "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": 272689875
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 765638855
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 92267878
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10219
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2629308
            }
          }
        ],
        "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": 6617483250
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 1926942
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 22783209
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2397974072
            }
          }
        ]
      },
      {
        "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": 9960915818
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1120422535
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 8176107
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2204866776
            }
          },
          {
            "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": 331708803
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 626080735
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51408511
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 20457
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2486061
            }
          }
        ],
        "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": 6588353515
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2597980
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 22319130
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2312178076
            }
          }
        ]
      },
      {
        "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": 28581629202
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1300975893
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 30,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6266688
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1131674354
            }
          },
          {
            "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": 243523350
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 805567188
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 46954774
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 18034
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2722954
            }
          }
        ],
        "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": 6715385365
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2026950
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 26484680
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2319651523
            }
          }
        ]
      },
      {
        "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": 10640656836
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 2371227784
            }
          },
          {
            "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": 384317174
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 6052646
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 47028452
            }
          },
          {
            "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": 404884591
            }
          },
          {
            "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": 300823833
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1006027188
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 71911590
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15028
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1881968
            }
          }
        ],
        "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": 6575769597
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3689286
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21843189
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2341343722
            }
          }
        ]
      },
      {
        "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": 1102166747
            }
          },
          {
            "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": 17898553088
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1337610645
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 6576419
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 3223535341
            }
          },
          {
            "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": 352562164
            }
          },
          {
            "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": 359799922
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1082319049
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52733998
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 22322
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2265417
            }
          }
        ],
        "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": 6624017496
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2223479
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19146643
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2339612005
            }
          }
        ]
      },
      {
        "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": 1113591866
            }
          },
          {
            "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": 29890934963
            }
          },
          {
            "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": 84446799
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf is empty",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:1149"
            },
            "result": {
              "status": "passed",
              "duration": 423426018
            }
          },
          {
            "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": 1062319612
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1117458929
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 3919101273
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 7222068
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 3256006249
            }
          },
          {
            "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": 337480690
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 554728665
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 41581221
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16058
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1997123
            }
          }
        ],
        "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": 6493949206
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2964949
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 23222794
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2370490151
            }
          }
        ]
      },
      {
        "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": 3976296611
            }
          },
          {
            "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": 245515518
            }
          },
          {
            "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": 211008408
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 859726896
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58962484
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14968
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2150421
            }
          }
        ],
        "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": 6488975628
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2352481
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 27421356
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1791468925
            }
          }
        ]
      },
      {
        "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": 7688271380
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1622463617
            }
          },
          {
            "keyword": "When ",
            "name": "I disconnect the network through GNOME",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10547195655
            }
          },
          {
            "keyword": "And ",
            "name": "I connect the network through GNOME",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10713032771
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 74787153
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant connects to Tor",
            "line": 77,
            "match": {
              "location": "features/step_definitions/tor.rb:391"
            },
            "result": {
              "status": "passed",
              "duration": 188245498
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1098432068
            }
          },
          {
            "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": 59742
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 39511727
            }
          },
          {
            "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": 728076176
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 751042192
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50374835
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19437
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3378003
            }
          }
        ],
        "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": 6662034699
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2911759
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 30231750
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2424340826
            }
          }
        ]
      },
      {
        "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": 5669034566
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 2158983943
            }
          },
          {
            "keyword": "And ",
            "name": "I disconnect the network through GNOME",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10650645154
            }
          },
          {
            "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": 1512763610
            }
          },
          {
            "keyword": "When ",
            "name": "I connect the network through GNOME",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10688947018
            }
          },
          {
            "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": 21274211500
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 996753215
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50557035
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14418
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1878041
            }
          }
        ],
        "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": 6378483708
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3307270
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 47480167
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1817487828
            }
          }
        ]
      },
      {
        "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": 1397378327
            }
          },
          {
            "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": 21741211829
            }
          },
          {
            "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": 70214070
            }
          },
          {
            "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": 1406282039
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 96,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1114236234
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 7021235464
            }
          },
          {
            "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": 331082389
            }
          },
          {
            "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": 315967864
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 591791655
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49523037
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1857051
            }
          }
        ],
        "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": 6403798477
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2007223
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25976071
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1901753390
            }
          }
        ]
      },
      {
        "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": 76592337
            }
          },
          {
            "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": 6048545662
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 6150088287
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2122589160
            }
          },
          {
            "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": 300567906
            }
          },
          {
            "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": 334289399
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 831295794
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51937064
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 35686
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 6715580
            }
          }
        ],
        "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": 6476475791
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 1942562
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14599683
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2323522928
            }
          }
        ]
      },
      {
        "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": 16855782
            }
          },
          {
            "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": 5791282655
            }
          },
          {
            "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": 83771467
            }
          },
          {
            "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": 2427246814
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 985403182
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 71870867
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14888
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1789826
            }
          }
        ],
        "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": 6442735724
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2873857
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21524315
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2377042430
            }
          }
        ]
      },
      {
        "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": 7003340
            }
          },
          {
            "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": 5956093860
            }
          },
          {
            "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": 2270671361
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 636781030
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 38726295
            }
          }
        ]
      }
    ]
  },
  {
    "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": 13365
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1706931
            }
          }
        ],
        "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": 6397919682
            }
          },
          {
            "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": 415265155
            }
          },
          {
            "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": 1212148275
            }
          },
          {
            "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": 2061900196
            }
          },
          {
            "keyword": "When ",
            "name": "I kill the allocating process",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 178989566
            }
          },
          {
            "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 1480 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 6782924938
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 718382302
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19386
            }
          }
        ]
      },
      {
        "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": 12964
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1716088
            }
          }
        ],
        "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": 6434021580
            }
          },
          {
            "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": 332558615
            }
          },
          {
            "keyword": "And ",
            "name": "I find very few patterns in the guest's memory",
            "line": 25,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1484 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1662958975
            }
          },
          {
            "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": 1619886100
            }
          },
          {
            "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": 1936196481
            }
          },
          {
            "keyword": "When ",
            "name": "I umount \"/mnt\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 275959099
            }
          },
          {
            "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 1484 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4763745458
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 741883955
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20127
            }
          }
        ]
      },
      {
        "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": 12584
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1660443
            }
          }
        ],
        "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": 6472489201
            }
          },
          {
            "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": 319916954
            }
          },
          {
            "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:1521"
            },
            "result": {
              "status": "passed",
              "duration": 5298207909
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 35,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1486 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1793324169
            }
          },
          {
            "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": 2577607236
            }
          },
          {
            "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": 2090796794
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1559"
            },
            "result": {
              "status": "passed",
              "duration": 676650390
            }
          },
          {
            "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 1486 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4726877680
            }
          },
          {
            "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:1554"
            },
            "result": {
              "status": "passed",
              "duration": 139637438
            }
          },
          {
            "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": 409233376
            }
          },
          {
            "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": 1889817172
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1559"
            },
            "result": {
              "status": "passed",
              "duration": 285218448
            }
          },
          {
            "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 1486 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4739448548
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 878393705
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 262392
            }
          }
        ]
      },
      {
        "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": 11530
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1637791
            }
          }
        ],
        "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": 6593650543
            }
          },
          {
            "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": 357335746
            }
          },
          {
            "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:1521"
            },
            "result": {
              "status": "passed",
              "duration": 29317514573
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 52,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1488 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1645514629
            }
          },
          {
            "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": 1421199424
            }
          },
          {
            "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": 1956341910
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1559"
            },
            "result": {
              "status": "passed",
              "duration": 560359441
            }
          },
          {
            "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 1488 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4621043378
            }
          },
          {
            "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:1554"
            },
            "result": {
              "status": "passed",
              "duration": 3465117995
            }
          },
          {
            "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": 315986334
            }
          },
          {
            "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": 1803541831
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1559"
            },
            "result": {
              "status": "passed",
              "duration": 456081458
            }
          },
          {
            "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 1488 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4649589559
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 642652879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 379432
            }
          }
        ]
      },
      {
        "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": 13385
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3090865
            }
          }
        ],
        "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": 6717555452
            }
          },
          {
            "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": 382284602
            }
          },
          {
            "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": 26556716826
            }
          },
          {
            "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": 1892800152
            }
          },
          {
            "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": 1520354528
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 72,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 6790681
            }
          },
          {
            "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 1484 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20510216954
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3536669323
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20088
            }
          }
        ]
      },
      {
        "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": 12432
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3197996
            }
          }
        ],
        "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": 230210128064
            }
          },
          {
            "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": 306662580
            }
          },
          {
            "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": 16510210871
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 79,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 4704149
            }
          },
          {
            "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 1503 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20986741375
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3709464846
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 16208067
            }
          }
        ]
      }
    ]
  },
  {
    "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": 23173
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3928976
            }
          }
        ],
        "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": 6908651649
            }
          },
          {
            "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": 13145245
            }
          },
          {
            "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": 2996068771
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"gptfat\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2270957609
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails Installer",
            "line": 12,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 8355943366
            }
          },
          {
            "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": 36174472
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 625907215
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 778731
            }
          }
        ]
      },
      {
        "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": 12404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1833898
            }
          }
        ],
        "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": 6419781876
            }
          },
          {
            "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": 8715579
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails Installer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 8732551006
            }
          },
          {
            "keyword": "But ",
            "name": "a suitable USB device is not found",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 11029909
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2284133603
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"temp\" USB drive is selected",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:171"
            },
            "result": {
              "status": "passed",
              "duration": 40996362
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"temp\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 130747481
            }
          },
          {
            "keyword": "Then ",
            "name": "a suitable USB device is not found",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 13433425
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 552223410
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 227106
            }
          }
        ]
      },
      {
        "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": 13184
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1753228
            }
          }
        ],
        "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": 6430696269
            }
          },
          {
            "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": 9509841
            }
          },
          {
            "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": 2954895523
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2222317547
            }
          },
          {
            "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": 96601219849
            }
          },
          {
            "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": 13426510044
            }
          },
          {
            "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": 2362211225
            }
          },
          {
            "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": 47635038
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 709059320
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 110875705
            }
          }
        ]
      },
      {
        "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": 15449
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1837694
            }
          }
        ],
        "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": 6584942300
            }
          },
          {
            "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": 9432164
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2272148310
            }
          },
          {
            "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": 96285853756
            }
          },
          {
            "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": 13321328181
            }
          },
          {
            "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": 2536333030
            }
          },
          {
            "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": 41412622
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 717890503
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 112570962
            }
          }
        ]
      },
      {
        "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": 16972
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1845861
            }
          }
        ],
        "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": 8119974218
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:1692"
            },
            "result": {
              "status": "passed",
              "duration": 63554074
            }
          },
          {
            "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": 8928039
            }
          },
          {
            "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": 2875096458
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2218007569
            }
          },
          {
            "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": 114691769955
            }
          },
          {
            "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": 16400430334
            }
          },
          {
            "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": 2608004137
            }
          },
          {
            "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": 52471376
            }
          },
          {
            "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": 2881354375
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 933395346
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 125605300
            }
          }
        ]
      },
      {
        "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": 17212
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2353813
            }
          }
        ],
        "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": 7280950329
            }
          },
          {
            "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": 10300321
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2313881855
            }
          },
          {
            "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": 112810884122
            }
          },
          {
            "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": 15968152722
            }
          },
          {
            "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": 2625856526
            }
          },
          {
            "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": 57916534
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 722927833
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 112427272
            }
          }
        ]
      },
      {
        "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": 16199
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1882710
            }
          }
        ],
        "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": 7105651042
            }
          },
          {
            "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": 7309597236
            }
          },
          {
            "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": 744417874
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2219922438
            }
          },
          {
            "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": 95845998660
            }
          },
          {
            "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": 13515252937
            }
          },
          {
            "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": 2552791732
            }
          },
          {
            "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": 161982562
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 918497235
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 116099578
            }
          }
        ]
      },
      {
        "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": 15369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1943724
            }
          }
        ],
        "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": 8337528040
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 257392069
            }
          },
          {
            "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": 20432168
            }
          },
          {
            "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": 61920876073
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 245138593
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:929"
            },
            "result": {
              "status": "passed",
              "duration": 2464589858
            }
          },
          {
            "keyword": "And ",
            "name": "Tails has started in UEFI mode",
            "line": 88,
            "match": {
              "location": "features/step_definitions/usb.rb:1193"
            },
            "result": {
              "status": "passed",
              "duration": 38464656
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 921798063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 4919083
            }
          }
        ]
      },
      {
        "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": 14427
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1103849
            }
          }
        ],
        "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": 7013797379
            }
          },
          {
            "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": 21581042111
            }
          },
          {
            "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": 10148759
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"usbimage\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2221777349
            }
          },
          {
            "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:1532"
            },
            "result": {
              "status": "passed",
              "duration": 19456081998
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1409257644
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 94187060
            }
          }
        ]
      },
      {
        "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": 15148
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1814451
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 50148513
            }
          },
          {
            "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": 66529461225
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"usbimage\"",
            "line": 101,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 226342349
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the system partition on \"usbimage\" is \"Tails\"",
            "line": 102,
            "match": {
              "location": "features/step_definitions/usb.rb:1433"
            },
            "result": {
              "status": "passed",
              "duration": 159129344
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" is an EFI system partition",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:1441"
            },
            "result": {
              "status": "passed",
              "duration": 150334903
            }
          },
          {
            "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:1450"
            },
            "result": {
              "status": "passed",
              "duration": 87440743
            }
          },
          {
            "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:1478"
            },
            "result": {
              "status": "passed",
              "duration": 74647797
            }
          },
          {
            "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:1495"
            },
            "result": {
              "status": "passed",
              "duration": 54448877
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" has the expected flags",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1512"
            },
            "result": {
              "status": "passed",
              "duration": 66574170
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 800335430
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5633903
            }
          }
        ]
      }
    ]
  },
  {
    "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": 21570
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1797320
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1450820
            }
          }
        ],
        "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": 77899093894
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 16,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 5981018953
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 17,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6260016224
            }
          },
          {
            "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": 2461370272
            }
          },
          {
            "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": 9454231573
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6813784107
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1390916305
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 3076758
            }
          }
        ]
      },
      {
        "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": 60684
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 15864052
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 7260301
            }
          }
        ],
        "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": 45912094794
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 29,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 5274744187
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 30,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6336736478
            }
          },
          {
            "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": 1843753793
            }
          },
          {
            "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": 14933887332
            }
          },
          {
            "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": 2034336346
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8075679594
            }
          },
          {
            "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": 37043386726
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 13362282440
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9518449426
            }
          },
          {
            "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": 10115701045
            }
          },
          {
            "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": 1699904899
            }
          },
          {
            "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": 616750948
            }
          },
          {
            "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:937"
            },
            "result": {
              "status": "passed",
              "duration": 122794905
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6073820058
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 809064743
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9257194
            }
          }
        ]
      },
      {
        "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": 23795
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2037210
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2162555
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 52554381
            }
          },
          {
            "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": 68244465645
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 47,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 4788167330
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"ripgrep\" using apt",
            "line": 48,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6259186324
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software dpkg hook has been run for package \"ripgrep\" and notices the persistence is locked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:144"
            },
            "result": {
              "status": "passed",
              "duration": 2160468441
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"ripgrep\" is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:937"
            },
            "result": {
              "status": "passed",
              "duration": 51275165
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6390470843
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 766475909
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10560050
            }
          }
        ]
      },
      {
        "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": 21400
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2328297
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2044142
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 88329937
            }
          },
          {
            "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": 97025683090
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"popularity-contest\" using apt",
            "line": 56,
            "match": {
              "location": "features/step_definitions/apt.rb:99"
            },
            "result": {
              "status": "passed",
              "duration": 3132334988
            }
          },
          {
            "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": 2391222044
            }
          },
          {
            "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": 517950286
            }
          },
          {
            "keyword": "When ",
            "name": "I start Synaptic",
            "line": 59,
            "match": {
              "location": "features/step_definitions/apt.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 11892796239
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using Synaptic",
            "line": 60,
            "match": {
              "location": "features/step_definitions/apt.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 21387665869
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"cowsay\" using Synaptic",
            "line": 61,
            "match": {
              "location": "features/step_definitions/apt.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 8745174852
            }
          },
          {
            "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": 2443803027
            }
          },
          {
            "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": 549222410
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"cowsay\" using apt",
            "line": 64,
            "match": {
              "location": "features/step_definitions/apt.rb:99"
            },
            "result": {
              "status": "passed",
              "duration": 3184009659
            }
          },
          {
            "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": 2423880125
            }
          },
          {
            "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": 594317424
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 67,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 9189623689
            }
          },
          {
            "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": 3027679808
            }
          },
          {
            "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": 776038350
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"cowsay\" using apt",
            "line": 70,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 3185990060
            }
          },
          {
            "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": 1397508801
            }
          },
          {
            "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": 502122784
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 322481027
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 532810349
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6866442
            }
          }
        ]
      },
      {
        "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": 16020
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1931932
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1667285
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 49241470
            }
          },
          {
            "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": 73524895356
            }
          },
          {
            "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": 5278285
            }
          },
          {
            "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:110"
            },
            "result": {
              "status": "passed",
              "duration": 8415659153
            }
          },
          {
            "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": 3641973226
            }
          },
          {
            "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": 557282699
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 7871176137
            }
          },
          {
            "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": 35756360834
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6393022734
            }
          },
          {
            "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": 4661278
            }
          },
          {
            "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:1654"
            },
            "result": {
              "status": "passed",
              "duration": 50055635
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9110277245
            }
          },
          {
            "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:122"
            },
            "result": {
              "status": "passed",
              "duration": 10185476842
            }
          },
          {
            "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:116"
            },
            "result": {
              "status": "passed",
              "duration": 32446251
            }
          },
          {
            "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": 54322654
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16804225
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12557088961
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1087359694
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 429180778
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software configuration window from the notification",
            "line": 103,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:159"
            },
            "result": {
              "status": "passed",
              "duration": 2522307884
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 13244158351
            }
          },
          {
            "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": 35451323404
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 5476010352
            }
          },
          {
            "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": 5035752
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9896282611
            }
          },
          {
            "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:122"
            },
            "result": {
              "status": "passed",
              "duration": 10205719205
            }
          },
          {
            "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:116"
            },
            "result": {
              "status": "passed",
              "duration": 40759787
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14748690
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 15724421804
            }
          },
          {
            "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": 54645901
            }
          },
          {
            "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:122"
            },
            "result": {
              "status": "passed",
              "duration": 62383197
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 644058533
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 744613445
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 15087997
            }
          }
        ]
      },
      {
        "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": 14316
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1745142
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1666674
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 121,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 49610220
            }
          },
          {
            "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": 36300180822
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6264846919
            }
          },
          {
            "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": 39628165
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9796185838
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 1749927110
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software log file from the notification",
            "line": 127,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 5764412601
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"cowsay\" is not installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:937"
            },
            "result": {
              "status": "passed",
              "duration": 55267825
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 73515727
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 716414515
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6076943
            }
          }
        ]
      }
    ]
  },
  {
    "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": 27782
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3443686
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 56813975
            }
          },
          {
            "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": 7732065
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"old\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1014995324
            }
          },
          {
            "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:1757"
            },
            "result": {
              "status": "passed",
              "duration": 13269124420
            }
          },
          {
            "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": 38830433824
            }
          },
          {
            "keyword": "Then ",
            "name": "the boot device has safe access rights",
            "line": 26,
            "match": {
              "location": "features/step_definitions/usb.rb:929"
            },
            "result": {
              "status": "passed",
              "duration": 2616932691
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 256800459
            }
          },
          {
            "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": 46472446
            }
          },
          {
            "keyword": "And ",
            "name": "process \"udev-watchdog\" is running",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:857"
            },
            "result": {
              "status": "passed",
              "duration": 37230419
            }
          },
          {
            "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": 180603094
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"old\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 130673306
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1176650142
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6681077
            }
          }
        ]
      },
      {
        "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": 18065
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1758428
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 50839855
            }
          },
          {
            "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": 51912737258
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 228027525
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 22963060575
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1095"
            },
            "result": {
              "status": "passed",
              "duration": 645963237
            }
          },
          {
            "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": 513976350
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8133426159
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 491902397
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7045689
            }
          }
        ]
      },
      {
        "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": 14627
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1942673
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 51111484
            }
          },
          {
            "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": 59280876274
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 219838687
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 48,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1188159801
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 49,
            "match": {
              "location": "features/step_definitions/usb.rb:1055"
            },
            "result": {
              "status": "passed",
              "duration": 1364334689
            }
          },
          {
            "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:972"
            },
            "result": {
              "status": "passed",
              "duration": 151653557
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 52,
            "match": {
              "location": "features/step_definitions/usb.rb:989"
            },
            "result": {
              "status": "passed",
              "duration": 437775349
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:1017"
            },
            "result": {
              "status": "passed",
              "duration": 1828521336
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 54,
            "match": {
              "location": "features/step_definitions/usb.rb:1095"
            },
            "result": {
              "status": "passed",
              "duration": 232424925
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 7864263476
            }
          },
          {
            "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:1134"
            },
            "result": {
              "status": "passed",
              "duration": 11750223337
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 519882042
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6925764
            }
          }
        ]
      },
      {
        "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": 13496
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1733630
            }
          }
        ],
        "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": 7872070620
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12144107743
            }
          },
          {
            "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": 757713504
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"to_upgrade\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2269867400
            }
          },
          {
            "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": 90938239173
            }
          },
          {
            "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": 15102391220
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"to_upgrade\"",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 126675149
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"__internal\"",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 136370817
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 2147309083
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 17854
            }
          }
        ]
      },
      {
        "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": 11571
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2747341
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 55059505
            }
          },
          {
            "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": 59876267855
            }
          },
          {
            "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": 928592749
            }
          },
          {
            "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": 281248261
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:929"
            },
            "result": {
              "status": "passed",
              "duration": 2419581668
            }
          },
          {
            "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:1101"
            },
            "result": {
              "status": "passed",
              "duration": 1211048687
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:1017"
            },
            "result": {
              "status": "passed",
              "duration": 1992049984
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 969933997
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7149704
            }
          }
        ]
      },
      {
        "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": 14908
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1877350
            }
          }
        ],
        "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": 8039179193
            }
          },
          {
            "keyword": "And ",
            "name": "no SquashFS delta is installed",
            "line": 83,
            "match": {
              "location": "features/step_definitions/usb.rb:1423"
            },
            "result": {
              "status": "passed",
              "duration": 76332257
            }
          },
          {
            "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:1435"
            },
            "result": {
              "status": "passed",
              "duration": 207539484
            }
          },
          {
            "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:1427"
            },
            "result": {
              "status": "passed",
              "duration": 59611840
            }
          },
          {
            "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:1271"
            },
            "result": {
              "status": "passed",
              "duration": 270190351
            }
          },
          {
            "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:1271"
            },
            "result": {
              "status": "passed",
              "duration": 347925408
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18715769
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 20121576238
            }
          },
          {
            "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:1307"
            },
            "result": {
              "status": "passed",
              "duration": 346381343
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.2~testoverlayfs",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:1326"
            },
            "result": {
              "status": "passed",
              "duration": 5136620828
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 19988520584
            }
          },
          {
            "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": "failed",
              "error_message": "Known issue #20282: Error starting GDM with your graphics card (RuntimeError)\n./features/step_definitions/common_steps.rb:448:in `/^the computer (?:re)?boots Tails$/'\n./features/step_definitions/common_steps.rb:235:in `/^I start Tails from (.+?) drive \"(.+?)\"( with network unplugged)?( and I login( with persistence enabled)?( with the changed persistence passphrase)?( (?:and|with) an administration password)?)?$/'\nfeatures/usb_upgrade.feature:93:in `When I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled'",
              "duration": 40629649955
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.2~testoverlayfs",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1458"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are present",
            "line": 96,
            "match": {
              "location": "features/step_definitions/usb.rb:1271"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.2~testoverlayfs SquashFS delta is installed",
            "line": 97,
            "match": {
              "location": "features/step_definitions/usb.rb:1423"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "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:1569"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "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:1435"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "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:1307"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.3~testoverlayfs",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1326"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "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": "skipped"
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.3~testoverlayfs",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1458"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 111,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1271"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.3~testoverlayfs SquashFS delta is installed",
            "line": 113,
            "match": {
              "location": "features/step_definitions/usb.rb:1423"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "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:1569"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "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:1435"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 118,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "Then ",
            "name": "the Upgrader considers the system as up-to-date",
            "line": 120,
            "match": {
              "location": "features/step_definitions/usb.rb:1393"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "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": "skipped"
            }
          },
          {
            "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:1271"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "output": [
              "SCENARIO FAILED: 'Upgrading an initial Tails installation with an incremental upgrade' (at time 01:06:29)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6356/artifact/build-artifacts/01:06:29_Upgrading_an_initial_Tails_installation_with_an_incremental_upgrade.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6356/artifact/build-artifacts/01:06:29_Upgrading_an_initial_Tails_installation_with_an_incremental_upgrade.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6356/artifact/build-artifacts/01:06:29_Upgrading_an_initial_Tails_installation_with_an_incremental_upgrade.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6356/artifact/build-artifacts/01:06:29_Upgrading_an_initial_Tails_installation_with_an_incremental_upgrade.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 5277310637
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6708337
            }
          }
        ]
      },
      {
        "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": 14126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1918958
            }
          }
        ],
        "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": 7214125916
            }
          },
          {
            "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:1435"
            },
            "result": {
              "status": "passed",
              "duration": 210374276
            }
          },
          {
            "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:1427"
            },
            "result": {
              "status": "passed",
              "duration": 62963796
            }
          },
          {
            "keyword": "And ",
            "name": "the signing key used by the Upgrader is outdated",
            "line": 130,
            "match": {
              "location": "features/step_definitions/usb.rb:1406"
            },
            "result": {
              "status": "passed",
              "duration": 44356221
            }
          },
          {
            "keyword": "But ",
            "name": "a current signing key is available on our website",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:1417"
            },
            "result": {
              "status": "passed",
              "duration": 26169
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 132,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14520253
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 133,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 16778620021
            }
          },
          {
            "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:1307"
            },
            "result": {
              "status": "passed",
              "duration": 394497456
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1052432967
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21621
            }
          }
        ]
      }
    ]
  },
  {
    "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": 19457
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2846156
            }
          }
        ],
        "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": 32847803771
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1413"
            },
            "result": {
              "status": "passed",
              "duration": 181107576
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 4117481884
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 193068692
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18074
            }
          }
        ]
      },
      {
        "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": 14146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3711579
            }
          }
        ],
        "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": 6422269976
            }
          },
          {
            "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": 302315114
            }
          },
          {
            "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": 24473803597
            }
          },
          {
            "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": 2129572726
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1413"
            },
            "result": {
              "status": "passed",
              "duration": 221260000
            }
          },
          {
            "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": 9214856992
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 23,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1475 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 518854523
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3821944401
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21029
            }
          }
        ]
      },
      {
        "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": 13655
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2791043
            }
          }
        ],
        "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": 6816757680
            }
          },
          {
            "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": 421995612
            }
          },
          {
            "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:1521"
            },
            "result": {
              "status": "passed",
              "duration": 5149266821
            }
          },
          {
            "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": 2582965832
            }
          },
          {
            "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": 51805755
            }
          },
          {
            "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": 2063554002
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1413"
            },
            "result": {
              "status": "passed",
              "duration": 165103378
            }
          },
          {
            "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": 9669878169
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 34,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1488 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 492333562
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3618652299
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 452198
            }
          }
        ]
      },
      {
        "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": 13235
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2963947
            }
          }
        ],
        "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": 6615450026
            }
          },
          {
            "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": 325873791
            }
          },
          {
            "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:1521"
            },
            "result": {
              "status": "passed",
              "duration": 27164116541
            }
          },
          {
            "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": 1260274591
            }
          },
          {
            "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": 75928561
            }
          },
          {
            "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": 1829855310
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1413"
            },
            "result": {
              "status": "passed",
              "duration": 232046705
            }
          },
          {
            "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": 8992899963
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 45,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1488 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 498520454
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3589293237
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 590527
            }
          }
        ]
      },
      {
        "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": 13715
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3195832
            }
          }
        ],
        "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": 7473570104
            }
          },
          {
            "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": 331392169
            }
          },
          {
            "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": 16450365660
            }
          },
          {
            "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": 2076308326
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1413"
            },
            "result": {
              "status": "passed",
              "duration": 332266908
            }
          },
          {
            "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": 5399403224
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 54,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1506 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 537678544
            }
          },
          {
            "keyword": "And ",
            "name": "Tails eventually shuts down",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 91067904805
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 257765772
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21751
            }
          }
        ]
      }
    ]
  },
  {
    "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": 17382
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3608917
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 78405886
            }
          },
          {
            "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": 33161527559
            }
          },
          {
            "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": 44090812
            }
          },
          {
            "keyword": "And ",
            "name": "no proposed-updates APT suite is enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/apt.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 37046736
            }
          },
          {
            "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": 59056119
            }
          },
          {
            "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": 55626359
            }
          },
          {
            "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": 7873971
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 691692515
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6435064
            }
          }
        ]
      }
    ]
  },
  {
    "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": 16140
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2015609
            }
          }
        ],
        "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": 7915102293
            }
          },
          {
            "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:904"
            },
            "result": {
              "status": "passed",
              "duration": 9270312040
            }
          },
          {
            "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": 714289151
            }
          },
          {
            "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": 7220867912
            }
          },
          {
            "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:1717"
            },
            "result": {
              "status": "passed",
              "duration": 5656335
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails' custom backup tool",
            "line": 14,
            "match": {
              "location": "features/step_definitions/backup.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 1873797337
            }
          },
          {
            "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": 148387246
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"backup\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2251123158
            }
          },
          {
            "keyword": "And ",
            "name": "I give the Persistent Storage on drive \"backup\" its own UUID",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 75105719
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Retry\" in the backup tool",
            "line": 18,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3136025043
            }
          },
          {
            "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": 127182732
            }
          },
          {
            "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": 3158140630
            }
          },
          {
            "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": 2003965636
            }
          },
          {
            "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": 10346769193
            }
          },
          {
            "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": 161923555
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"backup\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1646939844
            }
          },
          {
            "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": 2619575381
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 738511082
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 116130392
            }
          }
        ]
      }
    ]
  },
  {
    "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": 16941
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 186991
            }
          }
        ],
        "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": 28614916
            }
          },
          {
            "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": 80114559
            }
          },
          {
            "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": 43973
            }
          },
          {
            "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": 79448
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 12,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34254520
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 13,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 4545273
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 908884
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8115
            }
          }
        ]
      },
      {
        "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": 10069
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 68239
            }
          }
        ],
        "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": 45316871
            }
          },
          {
            "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": 75725571
            }
          },
          {
            "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": 78266
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 19,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 103394
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 20,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 44134
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 21,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31716462
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 22,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 177533
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 23,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 64140
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 24,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 60833
            }
          },
          {
            "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": 99106
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 986960
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7865
            }
          }
        ]
      },
      {
        "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": 11041
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 73308
            }
          }
        ],
        "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": 51630548
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 29,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9595299
            }
          },
          {
            "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": 86531029
            }
          },
          {
            "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": 39204
            }
          },
          {
            "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": 64501
            }
          },
          {
            "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": 990151536
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6548506
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 35,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 37178
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 36,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5035391
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 37,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 18635
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52802545
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 39,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 176019
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1379026
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7024
            }
          }
        ]
      },
      {
        "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": 11501
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 74831
            }
          }
        ],
        "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": 22744802
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 43,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9331194
            }
          },
          {
            "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": 84964391
            }
          },
          {
            "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": 35898
            }
          },
          {
            "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": 76814
            }
          },
          {
            "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": 963878390
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52569497
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 49,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 149029
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52014436
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 51,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 131597
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53921251
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 53,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 132801
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1297603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8677
            }
          }
        ]
      },
      {
        "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": 11713
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 80501
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 56,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 31524292
            }
          },
          {
            "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": 23066866
            }
          },
          {
            "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": 2592941
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 59,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2240241
            }
          },
          {
            "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": 33122
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 61,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53255314
            }
          },
          {
            "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": 185638
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1122945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6613
            }
          }
        ]
      },
      {
        "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": 11350
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 79308
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 65,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30798430
            }
          },
          {
            "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": 23625223
            }
          },
          {
            "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": 3243291
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 68,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2638696
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 69,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 54903
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 70,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30652026
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 71,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 30107
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 5043074
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13346
            }
          }
        ]
      },
      {
        "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": 11902
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 143690
            }
          }
        ],
        "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": 23407195
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 75,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 25649257
            }
          },
          {
            "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": 27711634
            }
          },
          {
            "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": 72828
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 78,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 6013003
            }
          },
          {
            "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": 967297790
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6268172
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 81,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 28383
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4923953
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 83,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 15719
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52162783
            }
          },
          {
            "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": 210255
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1474434
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8055
            }
          }
        ]
      },
      {
        "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": 16259
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 102060
            }
          }
        ],
        "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": 22940659
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 89,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 9606301
            }
          },
          {
            "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": 24819683
            }
          },
          {
            "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": 149850
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 92,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3454166
            }
          },
          {
            "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": 978672354
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53570705
            }
          },
          {
            "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": 172154
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 96,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52751980
            }
          },
          {
            "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": 169888
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54042389
            }
          },
          {
            "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": 170068
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1160115
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6902
            }
          }
        ]
      },
      {
        "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": 11662
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 71986
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 102,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30478912
            }
          },
          {
            "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": 62952573
            }
          },
          {
            "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": 39835
            }
          },
          {
            "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": 5353036
            }
          },
          {
            "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": 46246
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 107,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30142523
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 108,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 179766
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1113037
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6011
            }
          }
        ]
      },
      {
        "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": 11091
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 69360
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 111,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30044396
            }
          },
          {
            "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": 60780370
            }
          },
          {
            "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": 49633
            }
          },
          {
            "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": 5520079
            }
          },
          {
            "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": 57578
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 116,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 42210
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 117,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30922403
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 118,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 171080
            }
          },
          {
            "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": 53812
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 120,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 49533
            }
          },
          {
            "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": 66866
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1062883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5851
            }
          }
        ]
      },
      {
        "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": 11862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 73517
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 124,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30181454
            }
          },
          {
            "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": 61620807
            }
          },
          {
            "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": 39325
            }
          },
          {
            "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": 5824960
            }
          },
          {
            "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": 67767
            }
          },
          {
            "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": 985786615
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 130,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6027932
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 131,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 24426
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 132,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4839453
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 133,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 15880
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 134,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51237710
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 135,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 141105
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1241347
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6682
            }
          }
        ]
      },
      {
        "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": 12183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 75010
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 138,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30598187
            }
          },
          {
            "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": 61465045
            }
          },
          {
            "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": 39414
            }
          },
          {
            "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": 5582757
            }
          },
          {
            "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": 61676
            }
          },
          {
            "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": 983064167
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 144,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 56673601
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 145,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 144852
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 146,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 58944329
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 147,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 128962
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 148,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 57969422
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 149,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 96471
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1251666
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7404
            }
          }
        ]
      },
      {
        "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": 11691
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 77215
            }
          }
        ],
        "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": 65598765
            }
          },
          {
            "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": 69419457
            }
          },
          {
            "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": 25096
            }
          },
          {
            "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": 38132
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 156,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 38193294
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 157,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 117991
            }
          },
          {
            "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": 73648
            }
          },
          {
            "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": 62097
            }
          },
          {
            "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": 59071
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1353449
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6202
            }
          }
        ]
      },
      {
        "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": 11742
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 72034
            }
          }
        ],
        "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": 65758152
            }
          },
          {
            "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": 67418977
            }
          },
          {
            "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": 20409
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 166,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 45424
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 167,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 56507
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 168,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 34696379
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 169,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 173585
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 170,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 71012
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 171,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 63158
            }
          },
          {
            "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": 73899
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1132934
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6221
            }
          }
        ]
      },
      {
        "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": 12815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 107010
            }
          }
        ],
        "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": 25346850
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 176,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14930913
            }
          },
          {
            "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": 132879632
            }
          },
          {
            "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": 42460
            }
          },
          {
            "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": 117340
            }
          },
          {
            "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": 972635527
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5892497
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 182,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 27562
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 183,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4883696
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 184,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 15510
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 185,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28746705
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 186,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 143629
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1489160
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13936
            }
          }
        ]
      },
      {
        "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": 15339
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 87424
            }
          }
        ],
        "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": 25671589
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 190,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14861141
            }
          },
          {
            "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": 86420601
            }
          },
          {
            "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": 48121
            }
          },
          {
            "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": 107702
            }
          },
          {
            "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": 969044388
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 195,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29068749
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 196,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 153648
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 197,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28786239
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 198,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 152918
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 199,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28970013
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 200,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 123171
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1456290
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8837
            }
          }
        ]
      },
      {
        "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": 12013
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 95570
            }
          }
        ],
        "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": 26066750
            }
          },
          {
            "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": 61032525
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 205,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16330127
            }
          },
          {
            "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": 93726
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 207,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2190427
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 208,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52412423
            }
          },
          {
            "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": 203351
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1056321
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6461
            }
          }
        ]
      },
      {
        "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": 12624
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 74901
            }
          }
        ],
        "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": 24509861
            }
          },
          {
            "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": 61088177
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 214,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16385419
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 215,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 80522
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 216,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2073827
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 217,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30742326
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 218,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 41438
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1131982
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9688
            }
          }
        ]
      },
      {
        "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": 12983
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 76453
            }
          }
        ],
        "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": 25786325
            }
          },
          {
            "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": 61044648
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 223,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 16222545
            }
          },
          {
            "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": 85300
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 225,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2185878
            }
          },
          {
            "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": 997873355
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 227,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 24698644
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 228,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 46237
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 229,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7069303
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 230,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22943
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 231,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54048912
            }
          },
          {
            "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": 173445
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1214727
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10068
            }
          }
        ]
      },
      {
        "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": 11743
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 80692
            }
          }
        ],
        "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": 34915952
            }
          },
          {
            "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": 161833677
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 237,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 17084421
            }
          },
          {
            "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": 79108
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 239,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2144521
            }
          },
          {
            "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": 993507802
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 241,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53935930
            }
          },
          {
            "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": 164699
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 243,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52806372
            }
          },
          {
            "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": 174147
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 245,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 52492242
            }
          },
          {
            "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": 162334
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1421565
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7855
            }
          }
        ]
      },
      {
        "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": 13145
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 74240
            }
          }
        ],
        "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": 25243668
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 250,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15801725
            }
          },
          {
            "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": 61148000
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 252,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 3246035
            }
          },
          {
            "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": 209833
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 254,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2296154
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 255,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53050520
            }
          },
          {
            "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": 194824
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1088221
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5981
            }
          }
        ]
      },
      {
        "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": 14357
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 132059
            }
          }
        ],
        "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": 25422792
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 260,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15265180
            }
          },
          {
            "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": 60974084
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 262,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 3490885
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 263,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 154320
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 264,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2255680
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 265,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 30330494
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 266,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 52659
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1045790
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6071
            }
          }
        ]
      },
      {
        "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": 10400
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 71194
            }
          }
        ],
        "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": 24990032
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 270,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15282302
            }
          },
          {
            "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": 87482171
            }
          },
          {
            "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": 44212
            }
          },
          {
            "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": 5799933
            }
          },
          {
            "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": 87012
            }
          },
          {
            "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": 980231340
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 276,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6128389
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 277,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 33733
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 278,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5170733
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 279,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 19076
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 280,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 28853545
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 281,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 149039
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1247189
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7093
            }
          }
        ]
      },
      {
        "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": 12183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 83976
            }
          }
        ],
        "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": 25315814
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 285,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 14849510
            }
          },
          {
            "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": 86053143
            }
          },
          {
            "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": 42609
            }
          },
          {
            "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": 5777571
            }
          },
          {
            "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": 121489
            }
          },
          {
            "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": 964360336
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 291,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50382467
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 292,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 153668
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 293,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31109133
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 294,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 127689
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 295,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29806360
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 296,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 134182
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1248471
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11120
            }
          }
        ]
      },
      {
        "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": 12183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 72816
            }
          }
        ],
        "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": 24769668
            }
          },
          {
            "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": 40516
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 301,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31307344
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 302,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 183134
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 864391
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6021
            }
          }
        ]
      },
      {
        "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": 11392
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 71054
            }
          }
        ],
        "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": 24024031
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 306,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 69170
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 307,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 35818
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 308,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31545802
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 309,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 174738
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 310,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 58168
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 311,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 54753
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 876364
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5491
            }
          }
        ]
      },
      {
        "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": 9999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 70754
            }
          }
        ],
        "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": 24831855
            }
          },
          {
            "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": 69199
            }
          },
          {
            "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": 981319083
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 317,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7805493
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 318,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 128000
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 319,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6617597
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 320,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 101221
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 321,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7145678
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 322,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 1346123
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 2403646
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7084
            }
          }
        ]
      },
      {
        "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": 10960
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 79569
            }
          }
        ],
        "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": 24683557
            }
          },
          {
            "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": 70533
            }
          },
          {
            "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": 969238771
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 328,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7690947
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 329,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 34415
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 330,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6862636
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 331,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 19087
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 332,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6515616
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 333,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 125515
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1140298
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7945
            }
          }
        ]
      },
      {
        "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": 11091
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 70402
            }
          }
        ],
        "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": 24525131
            }
          },
          {
            "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": 50625
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 338,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31271968
            }
          },
          {
            "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": 176351
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 957546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6592
            }
          }
        ]
      },
      {
        "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": 11121
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 98413
            }
          }
        ],
        "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": 24798472
            }
          },
          {
            "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": 159229
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 344,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31689802
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 345,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 167114
            }
          },
          {
            "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": 76814
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 959419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5410
            }
          }
        ]
      },
      {
        "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": 10941
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 72788
            }
          }
        ],
        "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": 25531827
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-thunderbird'",
            "line": 350,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 66946
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 351,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 82424
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 352,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30555646
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 353,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 169028
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-thunderbird' suite",
            "line": 354,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 63890
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 355,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 59321
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 953478
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6332
            }
          }
        ]
      },
      {
        "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": 11050
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 88376
            }
          }
        ],
        "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": 25653675
            }
          },
          {
            "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": 77034
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 360,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30955868
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 361,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 195567
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1031694
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6243
            }
          }
        ]
      },
      {
        "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": 10820
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 93927
            }
          }
        ],
        "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": 55748337
            }
          },
          {
            "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": 136516
            }
          },
          {
            "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": 962718808
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 367,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7851019
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 368,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 131646
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 369,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6697026
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 370,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 86732
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 371,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6521856
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 372,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 84778
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1073593
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6723
            }
          }
        ]
      },
      {
        "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": 9869
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 69681
            }
          }
        ],
        "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": 23923062
            }
          },
          {
            "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": 71663
            }
          },
          {
            "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": 965385818
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 378,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8149099
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 379,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 39044
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 380,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6457086
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 381,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 17233
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 382,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6569267
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 383,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 127869
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1049438
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6202
            }
          }
        ]
      },
      {
        "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": 9768
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 70432
            }
          }
        ],
        "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": 24113829
            }
          },
          {
            "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": 65392
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 388,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 30047
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 389,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31524212
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 390,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 172915
            }
          },
          {
            "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": 57308
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 392,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 53710
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 964007
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8136
            }
          }
        ]
      },
      {
        "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": 12473
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 71464
            }
          }
        ],
        "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": 24646096
            }
          },
          {
            "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": 40646
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 397,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30960244
            }
          },
          {
            "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": 147237
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1081137
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5921
            }
          }
        ]
      },
      {
        "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": 10019
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 85279
            }
          }
        ],
        "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": 25715752
            }
          },
          {
            "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": 63199
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 403,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31098673
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 404,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 175680
            }
          },
          {
            "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": 183804
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1128396
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6222
            }
          }
        ]
      },
      {
        "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": 11893
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 114765
            }
          }
        ],
        "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": 23133390
            }
          },
          {
            "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": 64761
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 410,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2888115
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 411,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22854
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 865592
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6532
            }
          }
        ]
      },
      {
        "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": 10600
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 113022
            }
          }
        ],
        "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": 21715693
            }
          },
          {
            "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": 42981
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 416,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 2897973
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 417,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 20649
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 852809
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6673
            }
          }
        ]
      },
      {
        "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": 10680
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 77136
            }
          }
        ],
        "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": 20692233
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file is empty",
            "line": 421,
            "match": {
              "location": "features/step_definitions/build.rb:147"
            },
            "result": {
              "status": "passed",
              "duration": 33172
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 422,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 3524197
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 423,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 17924
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 1038146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5901
            }
          }
        ]
      }
    ]
  },
  {
    "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": 10248
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1647128
            }
          }
        ],
        "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": 6945965778
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3483171
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14261127
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 9501673748
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6765571235
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 41819332
            }
          }
        ]
      },
      {
        "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": 97112487
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 802108726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51799224
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16100
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3662987
            }
          }
        ],
        "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": 6419850836
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3193087
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18125181
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 9978522745
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6755055376
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 39252139
            }
          }
        ]
      },
      {
        "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:946"
            },
            "result": {
              "status": "passed",
              "duration": 114729392
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"manually-added-con\" NetworkManager connection",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 373511292
            }
          },
          {
            "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": 177875708
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 913417289
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49596342
            }
          }
        ]
      }
    ]
  },
  {
    "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": 15838
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2918141
            }
          }
        ],
        "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": 6476695101
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 9250025086
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 7,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 10729597851
            }
          },
          {
            "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": 583618755
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 932139651
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19657
            }
          }
        ]
      },
      {
        "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": 13406
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4783959
            }
          }
        ],
        "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": 9670056017
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 9517813302
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 10332375704
            }
          },
          {
            "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": 480869462
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 745974320
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20829
            }
          }
        ]
      }
    ]
  },
  {
    "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": 14107
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2873197
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2341710
            }
          }
        ],
        "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": 6560569403
            }
          },
          {
            "keyword": "When ",
            "name": "I start Electrum through the GNOME menu",
            "line": 9,
            "match": {
              "location": "features/step_definitions/electrum.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 10057943770
            }
          },
          {
            "keyword": "But ",
            "name": "the \"electrum\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 783323844
            }
          },
          {
            "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": 200003354
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 76726214
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1072554751
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 51026
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/evince.feature",
    "id": "using-evince",
    "keyword": "Feature",
    "name": "Using Evince",
    "description": "  As a Tails user\n  I want to view and print PDF files in Evince",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-/usr/share",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in /usr/share",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2718397
            }
          }
        ],
        "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": 6548306705
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/usr/share/cups/data/default-testpage.pdf\" with Evince",
            "line": 8,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4117622229
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1100504240
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4137465414
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 834583957
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19647
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-non-persistent-/home/amnesia",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in non-persistent /home/amnesia",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12804
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2766627
            }
          }
        ],
        "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": 6358295142
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia\" as user \"amnesia\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1029"
            },
            "result": {
              "status": "passed",
              "duration": 66782955
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/default-testpage.pdf\" with Evince",
            "line": 15,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4433782173
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1128106037
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4153533285
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 605883251
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19738
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-persistent-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in persistent /home/amnesia/Persistent",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14768
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2832671
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7196715423
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1029"
            },
            "result": {
              "status": "passed",
              "duration": 71796082
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/Persistent/default-testpage.pdf\" exists",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:998"
            },
            "result": {
              "status": "passed",
              "duration": 52303447
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/default-testpage.pdf\" with Evince",
            "line": 23,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4116751969
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1049037568
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/Persistent/output.pdf\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4198769262
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1052731644
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20919
            }
          }
        ]
      }
    ]
  },
  {
    "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": 14457
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2923671
            }
          }
        ],
        "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": 6426434931
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 7,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1361"
            },
            "result": {
              "status": "passed",
              "duration": 10000141041
            }
          },
          {
            "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": 43919820
            }
          },
          {
            "keyword": "When ",
            "name": "I press the \"PRINTSCREEN\" key",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1255"
            },
            "result": {
              "status": "passed",
              "duration": 120840121
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME offers me various screenshot options",
            "line": 10,
            "match": {
              "location": "features/step_definitions/gnome.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 890945909
            }
          },
          {
            "keyword": "And ",
            "name": "I press the \"Return\" key",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1255"
            },
            "result": {
              "status": "passed",
              "duration": 120882310
            }
          },
          {
            "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": 67331151
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 515395389
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21211
            }
          }
        ]
      },
      {
        "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": 12112
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2857337
            }
          }
        ],
        "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": 18826467211
            }
          },
          {
            "keyword": "When ",
            "name": "the \"Dogtail rules!\" notification is sent",
            "line": 16,
            "match": {
              "location": "features/step_definitions/gnome.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 222467350
            }
          },
          {
            "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": 244028464
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 898675630
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22432
            }
          }
        ]
      },
      {
        "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": 12423
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2745156
            }
          }
        ],
        "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": 7058990463
            }
          },
          {
            "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": 24199048
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 16075942267
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6744477266
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 9230620609
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tails-additional-software-config\" window",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 1597550559
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Disks\" via GNOME Activities Overview",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 7843784540
            }
          },
          {
            "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:1225"
            },
            "result": {
              "status": "passed",
              "duration": 307368720
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Console\" via GNOME Activities Overview",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 7800438704
            }
          },
          {
            "keyword": "And ",
            "name": "I close Console",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1237"
            },
            "result": {
              "status": "passed",
              "duration": 2826044856
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 7547623102
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"org.gnome.Nautilus\" window",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 13720068894
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Persistent Storage\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 10157562751
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tps-frontend\" window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 1778399206
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Back Up Persistent Storage\" via GNOME Activities Overview",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 10035829044
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 2027062248
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin\" via GNOME Activities Overview",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 7633334572
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Pidgin\" window via Alt+F4",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1225"
            },
            "result": {
              "status": "passed",
              "duration": 2005950988
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Thunderbird\" via GNOME Activities Overview",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 8259270763
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Start Thunderbird\" in the \"Thunderbird Migration\" zenity dialog",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1903"
            },
            "result": {
              "status": "passed",
              "duration": 3681209787
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Thunderbird\" window",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 2653787780
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tor Browser\" via GNOME Activities Overview",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 8251952493
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 4712337822
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unlock VeraCrypt Volumes\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 9886941206
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"unlock-veracrypt-volumes\" window",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 1704393348
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unsafe Browser\" via GNOME Activities Overview",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 8655163916
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 4047787762
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 7813799162
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"secrets\" window",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 2516770785
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1397856196
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20649
            }
          }
        ]
      }
    ]
  },
  {
    "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": 16171
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2775293
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 57056101
            }
          },
          {
            "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": 97873
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 693636422
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 24184138049
            }
          },
          {
            "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": 1915694617
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 819911356
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6256400
            }
          }
        ]
      },
      {
        "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": 16411
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1900223
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 47807130
            }
          },
          {
            "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": 33563
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 686434801
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 23306163034
            }
          },
          {
            "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": 1411227046
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 704920898
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6246952
            }
          }
        ]
      },
      {
        "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": 16951
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1744570
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 48214554
            }
          },
          {
            "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": 33372
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 691004880
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 23735436793
            }
          },
          {
            "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": 2790345094
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 917340461
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6098002
            }
          }
        ]
      },
      {
        "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": 16821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1837856
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 83078940
            }
          },
          {
            "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": 7166952155
            }
          },
          {
            "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": 1336382967
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 749154810
            }
          },
          {
            "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": 15724242398
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1064202770
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21981
            }
          }
        ]
      },
      {
        "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": 11712
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2935614
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 54086374
            }
          },
          {
            "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": 6995233260
            }
          },
          {
            "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": 306021074
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 1774006214
            }
          },
          {
            "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": 15406820199
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1105092919
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19426
            }
          }
        ]
      },
      {
        "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": 10980
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2749064
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 54064331
            }
          },
          {
            "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": 7158200254
            }
          },
          {
            "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": 1330995370
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 742598892
            }
          },
          {
            "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": 15297856399
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1140931441
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23705
            }
          }
        ]
      },
      {
        "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": 14227
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3556758
            }
          }
        ],
        "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": 8606651996
            }
          },
          {
            "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": 187572317
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 254542255
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 671941511
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 38015787350
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10164010176
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6619169535
            }
          },
          {
            "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": 195211346
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 23756969
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 930202072
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 59436052
            }
          }
        ]
      },
      {
        "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": 14586
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2775163
            }
          }
        ],
        "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": 7504011852
            }
          },
          {
            "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": 182998661
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 256353949
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 720947993
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 36861674625
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10168403830
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6704253779
            }
          },
          {
            "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": 121537355
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4671939
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 671771043
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6074660
            }
          }
        ]
      },
      {
        "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": 15369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1706650
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 51595163
            }
          },
          {
            "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": 32452
            }
          },
          {
            "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": 7625697
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1015169244
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 13365078872
            }
          },
          {
            "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": 53348026253
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 584554664
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids creating a persistent partition",
            "line": 56,
            "match": {
              "location": "features/step_definitions/hardware.rb:97"
            },
            "result": {
              "status": "passed",
              "duration": 43622764
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 8373280709
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6746495323
            }
          },
          {
            "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": 195618615
            }
          },
          {
            "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:1194"
            },
            "result": {
              "status": "passed",
              "duration": 1173029831
            }
          },
          {
            "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": 1175190342
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 64,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4330799
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 641346383
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 119467707
            }
          }
        ]
      },
      {
        "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": 19156
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1894170
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 49136661
            }
          },
          {
            "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": 24477
            }
          },
          {
            "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": 8334545
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1016332376
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 12986451960
            }
          },
          {
            "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": 48619066729
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 593628555
            }
          },
          {
            "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": 87852667
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 36727497
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 187648333
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error guid-not-randomized",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4907310
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 634237127
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 146030107
            }
          }
        ]
      },
      {
        "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": 18234
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1929498
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 52464090
            }
          },
          {
            "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": 31269
            }
          },
          {
            "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": 8473976
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1015955663
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 12931962213
            }
          },
          {
            "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": 48184813864
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 473551744
            }
          },
          {
            "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": 41505805
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 48493597
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 156999005
            }
          },
          {
            "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": 4975147
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 780869448
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 153589502
            }
          }
        ]
      },
      {
        "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": 15799
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1756434
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53119389
            }
          },
          {
            "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": 30528
            }
          },
          {
            "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": 7630595
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1015957446
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 12858751471
            }
          },
          {
            "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": 49216019293
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 432228341
            }
          },
          {
            "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": 42184028
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 33920826
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 152681621
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error fs-not-resized",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4775624
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 854619579
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 118881581
            }
          }
        ]
      }
    ]
  },
  {
    "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": 19216
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2013795
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53972970
            }
          },
          {
            "keyword": "And ",
            "name": "the computer has an unsupported graphics card",
            "line": 10,
            "match": {
              "location": "features/step_definitions/hardware.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 26881
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 667788514
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 25404774202
            }
          },
          {
            "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": 12416937534
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 891971108
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6345727
            }
          }
        ]
      }
    ]
  },
  {
    "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": 14578
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1869255
            }
          }
        ],
        "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": 6882011088
            }
          },
          {
            "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": 1494643776
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 914738073
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21180
            }
          }
        ]
      },
      {
        "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": 14226
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3016294
            }
          }
        ],
        "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": 6484975229
            }
          },
          {
            "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": 1095224420
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 601985750
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21220
            }
          }
        ]
      }
    ]
  },
  {
    "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": 14027
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3168611
            }
          }
        ],
        "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": 8050830262
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26427013638
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 40578498
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14372346699
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1064269904
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20809
            }
          }
        ]
      },
      {
        "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": 11462
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2950792
            }
          }
        ],
        "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": 7090822969
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25465747252
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 38744058
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14531668895
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 795186365
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23173
            }
          }
        ]
      },
      {
        "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": 13576
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2876021
            }
          }
        ],
        "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": 7037844424
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25144589950
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 36678575
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14323162934
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 835791109
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19998
            }
          }
        ]
      },
      {
        "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": 11551
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2954660
            }
          }
        ],
        "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": 6978334598
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25896358363
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 51000648
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14437832740
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1172020712
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20819
            }
          }
        ]
      },
      {
        "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": 12254
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2926598
            }
          }
        ],
        "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": 6977311098
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25730678532
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 46237066
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14364382828
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 819134791
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22232
            }
          }
        ]
      },
      {
        "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": 12433
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2866404
            }
          }
        ],
        "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": 6850114308
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Arabic (ar)",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26332911951
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"eg\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 94886264
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 72947201
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14835063
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11613770257
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4859543975
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5182488375
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 52799289
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7628223816
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4769933414
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 44,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5187505290
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 44,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4643820534
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 402760869
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1927745251
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21140
            }
          }
        ]
      },
      {
        "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": 13214
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3183008
            }
          }
        ],
        "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": 7065209684
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Chinese (zh_CN)",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25873553480
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"cn\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 118169386
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 100665068
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17038855
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12376944726
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4817846722
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5205697980
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 53389997
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7392997668
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4632790044
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5270321113
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 45,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4588178158
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 410472320
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1075253908
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20528
            }
          }
        ]
      },
      {
        "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": 11642
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2846458
            }
          }
        ],
        "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": 7191132256
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in English (en)",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12001309310
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 80633010
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 84343597
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15047761
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12497045796
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4801123135
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5229635647
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 56599653
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7483826279
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 3965351134
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5224252996
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4173124297
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 350446144
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 587651505
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24346
            }
          }
        ]
      },
      {
        "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": 12884
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2912080
            }
          }
        ],
        "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": 7108700943
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in French (fr)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25824585227
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"fr\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 103655754
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 106152243
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13849045
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12378619289
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5291479131
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5305292359
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 56155952
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7573992097
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5098118299
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5184301837
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4538894600
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"fr\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 345942347
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1136562398
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21841
            }
          }
        ]
      },
      {
        "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": 14357
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2837819
            }
          }
        ],
        "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": 7108052542
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de)",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25860116302
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"de\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 87112067
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 103508596
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15631356
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12132582767
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5354696139
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5210774774
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 54107811
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7502437290
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4685063324
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5237113105
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4661069382
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"de\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 350961797
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1109807512
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21340
            }
          }
        ]
      },
      {
        "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": 12894
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2991839
            }
          }
        ],
        "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": 7159779988
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Hindi (hi)",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25552272949
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"in\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 94415370
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 85451616
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16180215
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12165383385
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4945435178
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5221327370
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 49956058
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7393079227
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5224769759
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5204811994
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4480362664
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 344151190
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1091998025
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21541
            }
          }
        ]
      },
      {
        "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": 13194
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2934751
            }
          }
        ],
        "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": 7143905869
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Indonesian (id)",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25417015115
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"id\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 92242965
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 112198216
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20573371
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 13340118844
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4770887119
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5221160734
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 60941441
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 10664299708
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4895587676
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5249624446
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4459154980
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 338852443
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1311717704
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22272
            }
          }
        ]
      },
      {
        "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": 13435
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2910125
            }
          }
        ],
        "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": 7193062152
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Italian (it)",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25894051144
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"it\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 93298494
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 90438322
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13618421
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11377961936
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5328807670
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5191505280
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 66557200
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7418583800
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4799196084
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5192874817
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4470730359
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 343749024
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 782522139
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20829
            }
          }
        ]
      },
      {
        "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": 13014
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2931556
            }
          }
        ],
        "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": 7081479086
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Persian (fa)",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25755436650
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ir\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 126199898
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 130428687
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16009534
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12423817055
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5235413433
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5227214302
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 63439677
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7550459404
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4669776174
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5220784100
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4162141311
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ir\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 337616177
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 737627836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21089
            }
          }
        ]
      },
      {
        "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": 12744
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2852258
            }
          }
        ],
        "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": 6995924160
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Portuguese (pt)",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25974153100
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"pt\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 91238594
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 99352257
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14336648
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11342170585
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5736848334
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5183586598
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 59814131
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7356299559
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4794643531
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5209368855
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4576607125
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 337768210
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1364998118
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22211
            }
          }
        ]
      },
      {
        "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": 12503
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2857357
            }
          }
        ],
        "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": 7007626651
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Russian (ru)",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25787387474
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ru\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 103502968
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 89869708
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13399742
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11511276193
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5107786152
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5210383513
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 66744502
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7467878447
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4659610948
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5205148608
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4928591395
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ru\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 385509438
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1076646769
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22763
            }
          }
        ]
      },
      {
        "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": 10790
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2862948
            }
          }
        ],
        "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": 7085463630
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Spanish (es)",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 25012747209
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"es\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 123119936
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 151632904
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14721250
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11288845817
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5177343330
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5200867536
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 53637760
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7712415470
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4964603916
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5213967076
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4696213522
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 346186607
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1367102147
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20158
            }
          }
        ]
      },
      {
        "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": 13456
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3259270
            }
          }
        ],
        "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": 7003727669
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Turkish (tr)",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26164163013
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"tr\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 86721458
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1697"
            },
            "result": {
              "status": "passed",
              "duration": 79248206
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18672708
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11412971325
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 4876276092
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5232032795
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1685"
            },
            "result": {
              "status": "passed",
              "duration": 90234024
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 7707792550
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5056660753
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5180807025
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4744050231
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1693"
            },
            "result": {
              "status": "passed",
              "duration": 356057236
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1033518945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20519
            }
          }
        ]
      },
      {
        "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": 13656
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2923942
            }
          }
        ],
        "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": 8590652192
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4598045658
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1845"
            },
            "result": {
              "status": "passed",
              "duration": 2101337832
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 6809262342
            }
          },
          {
            "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": 39058692170
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1874"
            },
            "result": {
              "status": "passed",
              "duration": 264053702
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1019472307
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6612046
            }
          }
        ]
      },
      {
        "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": 15509
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2048290
            }
          }
        ],
        "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": 7395118328
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4490338717
            }
          },
          {
            "keyword": "And ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 2375860609
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1853"
            },
            "result": {
              "status": "passed",
              "duration": 131095168
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to French (fr)",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4486884761
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1853"
            },
            "result": {
              "status": "passed",
              "duration": 105480296
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 4089004214
            }
          },
          {
            "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": 39099935313
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1853"
            },
            "result": {
              "status": "passed",
              "duration": 393942655
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to French",
            "line": 76,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1874"
            },
            "result": {
              "status": "passed",
              "duration": 660488337
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 7901383721
            }
          },
          {
            "keyword": "Then ",
            "name": "the language is set to French",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1891"
            },
            "result": {
              "status": "passed",
              "duration": 51780578
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 613702971
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7173469
            }
          }
        ]
      },
      {
        "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": 13136
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2304230
            }
          }
        ],
        "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": 8276863033
            }
          },
          {
            "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": 315364952
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 27945081578
            }
          },
          {
            "keyword": "And ",
            "name": "I manually store legacy localization settings in Persistent Storage",
            "line": 85,
            "match": {
              "location": "features/step_definitions/usb.rb:1583"
            },
            "result": {
              "status": "passed",
              "duration": 517589308
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9335948406
            }
          },
          {
            "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": 36272966488
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1874"
            },
            "result": {
              "status": "passed",
              "duration": 243184476
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1884"
            },
            "result": {
              "status": "passed",
              "duration": 192672786
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 7364138202
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to German",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1874"
            },
            "result": {
              "status": "passed",
              "duration": 414065628
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1884"
            },
            "result": {
              "status": "passed",
              "duration": 184978734
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4470270393
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1845"
            },
            "result": {
              "status": "passed",
              "duration": 2070076396
            }
          },
          {
            "keyword": "When ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 2354470925
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1853"
            },
            "result": {
              "status": "passed",
              "duration": 128525032
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 2772730457
            }
          },
          {
            "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": 37011324869
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1874"
            },
            "result": {
              "status": "passed",
              "duration": 577633960
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Italy",
            "line": 102,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1884"
            },
            "result": {
              "status": "passed",
              "duration": 186859018
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 8474986713
            }
          },
          {
            "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:1884"
            },
            "result": {
              "status": "passed",
              "duration": 190264983
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1874"
            },
            "result": {
              "status": "passed",
              "duration": 638731298
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 821052648
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10111869
            }
          }
        ]
      }
    ]
  },
  {
    "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": 15488
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1755059
            }
          }
        ],
        "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": 7462205657
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4739084
            }
          },
          {
            "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": 7870143590
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10244762446
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16727592
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 9931938668
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 15,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 73977996
            }
          },
          {
            "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": 63810564
            }
          },
          {
            "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": 205951862
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 18,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 47977700
            }
          },
          {
            "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": 41143467
            }
          },
          {
            "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": 107787282
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 669827689
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 48752562
            }
          }
        ]
      },
      {
        "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": 12473
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3379316
            }
          }
        ],
        "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": 6924846208
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3685820
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11654460725
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14621813
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10498941751
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 28,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 82071079
            }
          },
          {
            "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": 58015679
            }
          },
          {
            "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": 214755130
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 31,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 68687788
            }
          },
          {
            "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": 57523798
            }
          },
          {
            "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": 68515095
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 563954950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54669867
            }
          }
        ]
      },
      {
        "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": 13746
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2939762
            }
          }
        ],
        "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": 7102704113
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5727729
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15989137
            }
          },
          {
            "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": 80969305
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10298964350
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 41,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 60611696
            }
          },
          {
            "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": 7158811
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 1580476266
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 573345997
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 29646773
            }
          }
        ]
      },
      {
        "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": 14828
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3155737
            }
          }
        ],
        "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": 7176608691
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4383208
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20938636
            }
          },
          {
            "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": 81825890
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10801748976
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 51,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 57160006
            }
          },
          {
            "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": 5181103
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 1592004972
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1250295651
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50753094
            }
          }
        ]
      },
      {
        "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": 16952
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3123426
            }
          }
        ],
        "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": 7048227176
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3429922
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 39264704
            }
          },
          {
            "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": 96588275
            }
          },
          {
            "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": 118480410
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10939385711
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 62,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 70797902
            }
          },
          {
            "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": 284000777
            }
          },
          {
            "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": 6029174
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 1676848655
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 926247994
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44914715
            }
          }
        ]
      },
      {
        "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": 16842
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3343759
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 46709712
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 1594229
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 706190981
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 32435231129
            }
          },
          {
            "keyword": "And ",
            "name": "no network interfaces are enabled",
            "line": 72,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 65628190
            }
          },
          {
            "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": 6297958
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 947755728
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 54300003
            }
          }
        ]
      }
    ]
  },
  {
    "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": 13926
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1779898
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 49631118
            }
          },
          {
            "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": 48042515753
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a sample PNG",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:258"
            },
            "result": {
              "status": "passed",
              "duration": 8084030403
            }
          },
          {
            "keyword": "Then ",
            "name": "MAT can clean some sample PNG file",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:267"
            },
            "result": {
              "status": "passed",
              "duration": 922495398
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 568781911
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7117193
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/needed_package_updates.feature",
    "id": "packages-are-up-to-date",
    "keyword": "Feature",
    "name": "Packages are up-to-date",
    "description": "  On Tails branches that use frozen APT sources,\n  packages we install from frozen distributions (e.g. the Linux kernel\n  installed from testing/sid),\n  and packages forked from Debian that we install from our custom APT repository,\n  can become outdated.\n  As a Tails developer, I want to ensure we don't miss important updates.",
    "line": 3,
    "tags": [
      {
        "name": "@source",
        "line": 2
      },
      {
        "name": "@fragile",
        "line": 2
      }
    ],
    "comments": [
      {
        "value": "# This fails too loudly so let's run it on fewer branches (tails/tails#21316)",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "packages-are-up-to-date;all-packages-are-up-to-date",
        "keyword": "Scenario",
        "name": "All packages are up-to-date",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15469
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 82213
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 12,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 51636
            }
          },
          {
            "keyword": "Then ",
            "name": "all packages listed in the build manifest are up-to-date",
            "line": 13,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 616568680
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 137447
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6322
            }
          }
        ]
      }
    ]
  },
  {
    "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": 12504
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3138084
            }
          }
        ],
        "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": 6958689300
            }
          },
          {
            "keyword": "And ",
            "name": "I wait between 30 and 60 seconds",
            "line": 6,
            "output": [
              "Slept for 49 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1361"
            },
            "result": {
              "status": "passed",
              "duration": 49000232617
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Status icon tells me that Tor is not usable",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 303242650
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15728077
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 9293292574
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Status icon tells me that Tor is usable",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 470204661
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6742037448
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:752"
            },
            "result": {
              "status": "passed",
              "duration": 51461540
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 856689733
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19607
            }
          }
        ]
      },
      {
        "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": 10369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2927067
            }
          }
        ],
        "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": 7068075045
            }
          },
          {
            "keyword": "And ",
            "name": "I disable networking in Tails Greeter",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:568"
            },
            "result": {
              "status": "passed",
              "duration": 7875752790
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10971376127
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 64474598
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 59650203
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 21,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1361"
            },
            "result": {
              "status": "passed",
              "duration": 10000150244
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 22,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 340489584
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 992540567
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20549
            }
          }
        ]
      }
    ]
  },
  {
    "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": 13265
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3052593
            }
          }
        ],
        "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": 10861715915
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Onion Circuits\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 8978755161
            }
          },
          {
            "keyword": "Then ",
            "name": "Onion Circuits starts",
            "line": 7,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 659475522
            }
          },
          {
            "keyword": "And ",
            "name": "Onion Circuits shows some circuits",
            "line": 8,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 225772441
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1532056847
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49463
            }
          }
        ]
      }
    ]
  },
  {
    "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": 10991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2963657
            }
          }
        ],
        "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": 76997240889
            }
          },
          {
            "keyword": "And ",
            "name": "I update APT using apt",
            "line": 8,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 6334942229
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"python3-behave\" using apt",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 6244866628
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails Persistent Storage behave tests pass",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:1679"
            },
            "result": {
              "status": "passed",
              "duration": 846002630
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 817093360
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19998
            }
          }
        ]
      },
      {
        "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": 11261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3025962
            }
          }
        ],
        "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": 8503316224
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 13339297026
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 480650405
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is disabled",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:827"
            },
            "result": {
              "status": "passed",
              "duration": 150568352
            }
          },
          {
            "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": 4491722679
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1032551360
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21050
            }
          }
        ]
      },
      {
        "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": 11713
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3038426
            }
          }
        ],
        "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": 8430233493
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 359271588
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:1692"
            },
            "result": {
              "status": "passed",
              "duration": 104769046
            }
          },
          {
            "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": 17481853836
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 24,
            "match": {
              "location": "features/step_definitions/usb.rb:1699"
            },
            "result": {
              "status": "passed",
              "duration": 437133115
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 6719965567
            }
          },
          {
            "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": 58538953850
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1040"
            },
            "result": {
              "status": "passed",
              "duration": 207062938
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:1710"
            },
            "result": {
              "status": "passed",
              "duration": 45324475
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1004921288
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 7852241
            }
          }
        ]
      },
      {
        "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": 15849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2081752
            }
          }
        ],
        "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": 7392718226
            }
          },
          {
            "keyword": "And ",
            "name": "the system is very low on memory",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:367"
            },
            "result": {
              "status": "passed",
              "duration": 3414160478
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:1692"
            },
            "result": {
              "status": "passed",
              "duration": 175132058
            }
          },
          {
            "keyword": "When ",
            "name": "I try to create a persistent partition",
            "line": 34,
            "match": {
              "location": "features/step_definitions/usb.rb:345"
            },
            "result": {
              "status": "passed",
              "duration": 4350406516
            }
          },
          {
            "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": 147922763
            }
          },
          {
            "keyword": "When ",
            "name": "I close the Persistent Storage app",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:414"
            },
            "result": {
              "status": "passed",
              "duration": 2388307270
            }
          },
          {
            "keyword": "And ",
            "name": "I free up some memory",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:407"
            },
            "result": {
              "status": "passed",
              "duration": 879630483
            }
          },
          {
            "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": 8966370865
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1699"
            },
            "result": {
              "status": "passed",
              "duration": 60523913
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1018223939
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24446
            }
          }
        ]
      },
      {
        "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": 17603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3237110
            }
          }
        ],
        "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": 8061467528
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/usb.rb:915"
            },
            "result": {
              "status": "passed",
              "duration": 295009457
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 44,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1322677763
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 45,
            "match": {
              "location": "features/step_definitions/usb.rb:1017"
            },
            "result": {
              "status": "passed",
              "duration": 1935123484
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2510817550
            }
          },
          {
            "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": 1099524898
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9315276976
            }
          },
          {
            "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": 61014408333
            }
          },
          {
            "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": 1049278395
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 590907330
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 33118743
            }
          }
        ]
      },
      {
        "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": 14817
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2107191
            }
          }
        ],
        "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": 7598470550
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1040"
            },
            "result": {
              "status": "passed",
              "duration": 112045374
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:1692"
            },
            "result": {
              "status": "passed",
              "duration": 64584255
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 56,
            "match": {
              "location": "features/step_definitions/usb.rb:1699"
            },
            "result": {
              "status": "passed",
              "duration": 54536266
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 57,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2529997496
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is not active",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1040"
            },
            "result": {
              "status": "passed",
              "duration": 47444229
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent directory does not exist",
            "line": 59,
            "match": {
              "location": "features/step_definitions/usb.rb:1716"
            },
            "result": {
              "status": "passed",
              "duration": 52096442
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the first tps feature",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2555575960
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1040"
            },
            "result": {
              "status": "passed",
              "duration": 52928201
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 62,
            "match": {
              "location": "features/step_definitions/usb.rb:1710"
            },
            "result": {
              "status": "passed",
              "duration": 45821507
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 606144394
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21520
            }
          }
        ]
      },
      {
        "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": 12835
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3046733
            }
          }
        ],
        "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": 7051538103
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1040"
            },
            "result": {
              "status": "passed",
              "duration": 82124139
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:1692"
            },
            "result": {
              "status": "passed",
              "duration": 63744178
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the first tps feature",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2611421066
            }
          },
          {
            "keyword": "And ",
            "name": "I delete the data of the Persistent Folder feature",
            "line": 69,
            "match": {
              "location": "features/step_definitions/usb.rb:1720"
            },
            "result": {
              "status": "passed",
              "duration": 2822049305
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created does not exist on the Persistent Storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/usb.rb:1705"
            },
            "result": {
              "status": "passed",
              "duration": 43658712
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1102572490
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 89960
            }
          }
        ]
      },
      {
        "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": 13084
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3592616
            }
          }
        ],
        "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": 7118041402
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25124193
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 16355517707
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:1095"
            },
            "result": {
              "status": "passed",
              "duration": 305603014
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1055"
            },
            "result": {
              "status": "passed",
              "duration": 1206218475
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 14721614001
            }
          },
          {
            "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:1134"
            },
            "result": {
              "status": "passed",
              "duration": 11646995292
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 445555260
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20278
            }
          }
        ]
      },
      {
        "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": 14548
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4551083
            }
          }
        ],
        "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": 7528936877
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 48877336
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 16339364062
            }
          },
          {
            "keyword": "And ",
            "name": "I add a wired DHCP NetworkManager connection called \"persistent-con-current\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:946"
            },
            "result": {
              "status": "passed",
              "duration": 190927015
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 19707607446
            }
          },
          {
            "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": 71370616142
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3580201
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15555315
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 22613683510
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"persistent-con-current\" NetworkManager connection",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:961"
            },
            "result": {
              "status": "passed",
              "duration": 366974408
            }
          },
          {
            "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": 47565567
            }
          },
          {
            "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": 111112258
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 962298464
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44829879
            }
          }
        ]
      },
      {
        "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": 55253
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 9401407
            }
          }
        ],
        "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": 8249938515
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence creation in Tails Greeter",
            "line": 98,
            "match": {
              "location": "features/step_definitions/usb.rb:322"
            },
            "result": {
              "status": "passed",
              "duration": 1069171674
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 12439798895
            }
          },
          {
            "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": 16505993414
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1445386079
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23834
            }
          }
        ]
      },
      {
        "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": 15549
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5217543
            }
          }
        ],
        "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": 8421774719
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 12106109651
            }
          },
          {
            "keyword": "Then ",
            "name": "no persistent Greeter options were restored",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 12766271962
            }
          },
          {
            "keyword": "When ",
            "name": "I set all Greeter options to non-default values",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1607"
            },
            "result": {
              "status": "passed",
              "duration": 38333255535
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1874"
            },
            "result": {
              "status": "passed",
              "duration": 298823323
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1884"
            },
            "result": {
              "status": "passed",
              "duration": 216569732
            }
          },
          {
            "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:468"
            },
            "result": {
              "status": "passed",
              "duration": 4508997211
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 23758787613
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1631"
            },
            "result": {
              "status": "passed",
              "duration": 142716730
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 6099239847
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 35780542920
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1874"
            },
            "result": {
              "status": "passed",
              "duration": 285086775
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 116,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1884"
            },
            "result": {
              "status": "passed",
              "duration": 197407228
            }
          },
          {
            "keyword": "Given ",
            "name": "I enable persistence",
            "line": 117,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6864172340
            }
          },
          {
            "keyword": "Then ",
            "name": "persistent Greeter options were restored",
            "line": 118,
            "match": {
              "location": "features/step_definitions/usb.rb:1667"
            },
            "result": {
              "status": "passed",
              "duration": 68851678
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Belgium",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1884"
            },
            "result": {
              "status": "passed",
              "duration": 254061868
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 9007065954
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 121,
            "match": {
              "location": "features/step_definitions/usb.rb:1631"
            },
            "result": {
              "status": "passed",
              "duration": 160695821
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 567172145
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6407603
            }
          }
        ]
      },
      {
        "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": 15259
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1783494
            }
          }
        ],
        "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": 8207825387
            }
          },
          {
            "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": 27540304399
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9186622739
            }
          },
          {
            "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": 61785560583
            }
          },
          {
            "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": 20313004132
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1154016464
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 15096504
            }
          }
        ]
      },
      {
        "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": 15238
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1842264
            }
          }
        ],
        "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": 8222568392
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 14123852079
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is disabled",
            "line": 136,
            "match": {
              "location": "features/step_definitions/usb.rb:827"
            },
            "result": {
              "status": "passed",
              "duration": 106341384
            }
          },
          {
            "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": 4402980768
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7609610548
            }
          },
          {
            "keyword": "When ",
            "name": "I delete the persistent partition",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:1174"
            },
            "result": {
              "status": "passed",
              "duration": 2668533067
            }
          },
          {
            "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": 431158680
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 875107711
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21460
            }
          }
        ]
      },
      {
        "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": 13404
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3234805
            }
          }
        ],
        "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": 7205821641
            }
          },
          {
            "keyword": "When ",
            "name": "I write some dotfile expected to persist",
            "line": 144,
            "match": {
              "location": "features/step_definitions/usb.rb:1065"
            },
            "result": {
              "status": "passed",
              "duration": 64151573
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 145,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9325357878
            }
          },
          {
            "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": 61243141341
            }
          },
          {
            "keyword": "Then ",
            "name": "the expected persistent dotfile is present in the filesystem",
            "line": 147,
            "match": {
              "location": "features/step_definitions/usb.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 229896760
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 701148241
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6360936
            }
          }
        ]
      },
      {
        "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": 14838
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 1733200
            }
          }
        ],
        "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": 7948624033
            }
          },
          {
            "keyword": "And ",
            "name": "I create a symlink \"/home/amnesia/Persistent\" to \"/etc\"",
            "line": 151,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1725"
            },
            "result": {
              "status": "passed",
              "duration": 44995810
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 152,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1147747641
            }
          },
          {
            "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:1753"
            },
            "result": {
              "status": "passed",
              "duration": 8924627367
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 10152029387
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 155,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7431993022
            }
          },
          {
            "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:1776"
            },
            "result": {
              "status": "passed",
              "duration": 1330543051
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are enabled",
            "line": 157,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1035040592
            }
          },
          {
            "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": 1034947317
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 748710099
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21340
            }
          }
        ]
      },
      {
        "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": 10420
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2918633
            }
          }
        ],
        "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": 29873583017
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 162,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 18954779326
            }
          },
          {
            "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:514"
            },
            "result": {
              "status": "passed",
              "duration": 9794296879
            }
          },
          {
            "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": 530606680
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is enabled",
            "line": 165,
            "match": {
              "location": "features/step_definitions/usb.rb:831"
            },
            "result": {
              "status": "passed",
              "duration": 1656662956
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 992860659
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21149
            }
          }
        ]
      },
      {
        "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": 12664
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2999203
            }
          }
        ],
        "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": 7008559641
            }
          },
          {
            "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": 14510378754
            }
          },
          {
            "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": 506385619
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 838317701
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20839
            }
          }
        ]
      },
      {
        "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": 11322
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3461932
            }
          }
        ],
        "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": 8103076681
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\"",
            "line": 174,
            "match": {
              "location": "features/step_definitions/usb.rb:1803"
            },
            "result": {
              "status": "passed",
              "duration": 7535545455
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 175,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6712195157
            }
          },
          {
            "keyword": "Then ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 176,
            "match": {
              "location": "features/step_definitions/usb.rb:1845"
            },
            "result": {
              "status": "passed",
              "duration": 47786000
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is successfully enabled",
            "line": 177,
            "match": {
              "location": "features/step_definitions/usb.rb:681"
            },
            "result": {
              "status": "passed",
              "duration": 1561682875
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 851770791
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23924
            }
          }
        ]
      },
      {
        "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": 11121
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3330875
            }
          }
        ],
        "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": 7571623005
            }
          },
          {
            "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:1803"
            },
            "result": {
              "status": "passed",
              "duration": 7601027037
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 182,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1252478276
            }
          },
          {
            "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:1761"
            },
            "result": {
              "status": "passed",
              "duration": 3107660836
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 184,
            "match": {
              "location": "features/step_definitions/usb.rb:1853"
            },
            "result": {
              "status": "passed",
              "duration": 1190223720
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the filesystem was repaired successfully",
            "line": 185,
            "match": {
              "location": "features/step_definitions/usb.rb:1857"
            },
            "result": {
              "status": "passed",
              "duration": 393089468
            }
          },
          {
            "keyword": "And ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 186,
            "match": {
              "location": "features/step_definitions/usb.rb:1845"
            },
            "result": {
              "status": "passed",
              "duration": 67104968
            }
          },
          {
            "keyword": "When ",
            "name": "I close the filesystem repair dialog",
            "line": 187,
            "match": {
              "location": "features/step_definitions/usb.rb:1863"
            },
            "result": {
              "status": "passed",
              "duration": 1136731512
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is successfully enabled",
            "line": 188,
            "match": {
              "location": "features/step_definitions/usb.rb:681"
            },
            "result": {
              "status": "passed",
              "duration": 893540526
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1042996567
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22161
            }
          }
        ]
      },
      {
        "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": 12484
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3603987
            }
          }
        ],
        "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": 7301565959
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent Storage filesystem is corrupted beyond what e2fsck can repair",
            "line": 193,
            "match": {
              "location": "features/step_definitions/usb.rb:1836"
            },
            "result": {
              "status": "passed",
              "duration": 67375175
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 194,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1134743315
            }
          },
          {
            "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:1761"
            },
            "result": {
              "status": "passed",
              "duration": 8614566161
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 196,
            "match": {
              "location": "features/step_definitions/usb.rb:1853"
            },
            "result": {
              "status": "passed",
              "duration": 1139325124
            }
          },
          {
            "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:1768"
            },
            "result": {
              "status": "passed",
              "duration": 25171692
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 198,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10899612774
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 199,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 9251808362
            }
          },
          {
            "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:1834"
            },
            "result": {
              "status": "passed",
              "duration": 180888394
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/var/lib/gdm3/post-greeter-whisperback.json\" is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1012"
            },
            "result": {
              "status": "passed",
              "duration": 383860942
            }
          },
          {
            "keyword": "When ",
            "name": "I close the \"whisperback\" window",
            "line": 207,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 1169273540
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 208,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 1225351136
            }
          },
          {
            "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": 779959545
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 623814983
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20969
            }
          }
        ]
      },
      {
        "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": 11181
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3120380
            }
          }
        ],
        "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": 7629540801
            }
          },
          {
            "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:1803"
            },
            "result": {
              "status": "passed",
              "duration": 7324074131
            }
          },
          {
            "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": 1323102287
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 216,
            "match": {
              "location": "features/step_definitions/usb.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 1153359841
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that my hardware is probably failing",
            "line": 217,
            "match": {
              "location": "features/step_definitions/usb.rb:1871"
            },
            "result": {
              "status": "passed",
              "duration": 2673256683
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 218,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10228639803
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 219,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 8668272146
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 220,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 1323838730
            }
          },
          {
            "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": 746924849
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 721972068
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20679
            }
          }
        ]
      }
    ]
  },
  {
    "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": 15419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3457662
            }
          }
        ],
        "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": 8405977470
            }
          },
          {
            "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": 16956562998
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 716835328
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15133633
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4648340553
            }
          },
          {
            "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": 10935084998
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1200886692
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 5978859
            }
          },
          {
            "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": 563493792
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 10208564943
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 36009927973
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6461748982
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3798932
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9389615607
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 5581314
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 41036677
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4456108385
            }
          }
        ]
      },
      {
        "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": 1462139292
            }
          },
          {
            "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": 1695778991
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1253985103
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 5883637428
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 31,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 5031634
            }
          },
          {
            "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": 538546133
            }
          },
          {
            "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": 233229511
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 775728535
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 50285137
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15940
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3275361
            }
          }
        ],
        "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": 7426730265
            }
          },
          {
            "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": 16738764595
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:802"
            },
            "result": {
              "status": "passed",
              "duration": 567017717
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21739929
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2174778675
            }
          },
          {
            "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": 10625956412
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1145377536
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 5800384
            }
          },
          {
            "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": 509768733
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 8995971559
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 36682512811
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 5584544528
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3574101
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 8728577870
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6004167
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16482973
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4634371813
            }
          }
        ]
      },
      {
        "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": 1443395686
            }
          },
          {
            "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": 1742978023
            }
          },
          {
            "keyword": "And ",
            "name": "I disable saving bridges to Persistent Storage",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:740"
            },
            "result": {
              "status": "passed",
              "duration": 1282193246
            }
          },
          {
            "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": 6426389388
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1713878833
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 6082414
            }
          },
          {
            "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": 524059863
            }
          },
          {
            "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": 333625407
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 958455458
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 65489913
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/pidgin.feature",
    "id": "chatting-anonymously-using-pidgin",
    "keyword": "Feature",
    "name": "Chatting anonymously using Pidgin",
    "description": "  As a Tails user\n  when I chat using Pidgin\n  I should be able to persist my Pidgin configuration\n  And all Internet traffic should flow only through Tor",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 2
      },
      {
        "name": "@fragile",
        "line": 2
      }
    ],
    "comments": [
      {
        "value": "#19040",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "chatting-anonymously-using-pidgin;make-sure-pidgin's-d-bus-interface-is-blocked",
        "keyword": "Scenario",
        "name": "Make sure Pidgin's D-Bus interface is blocked",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16160
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2028734
            }
          }
        ],
        "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": 7040419195
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 9954563240
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 12,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1133072619
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin's D-Bus interface is not available",
            "line": 13,
            "match": {
              "location": "features/step_definitions/pidgin.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 709976888
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 883357770
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18725
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;chatting-with-some-friend-over-xmpp",
        "keyword": "Scenario",
        "name": "Chatting with some friend over XMPP",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12304
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5513397
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 6143999
            }
          }
        ],
        "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": 11387514458
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 10302528103
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 19,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1052537055
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 20,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 11435291082
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 21,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 433770564
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 22,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 16455977569
            }
          },
          {
            "keyword": "Given ",
            "name": "my XMPP friend goes online",
            "line": 23,
            "match": {
              "location": "features/step_definitions/pidgin.rb:151"
            },
            "result": {
              "status": "failed",
              "error_message": "Known issue #21440: XMPP friend failed to go online (RuntimeError)\n./features/step_definitions/pidgin.rb:166:in `rescue in block in <top (required)>'\n./features/step_definitions/pidgin.rb:163:in `/^my XMPP friend goes online$/'\nfeatures/pidgin.feature:23:in `Given my XMPP friend goes online'",
              "duration": 75248365671
            }
          },
          {
            "keyword": "When ",
            "name": "I start a conversation with my friend",
            "line": 24,
            "match": {
              "location": "features/step_definitions/pidgin.rb:170"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I say something to my friend",
            "line": 25,
            "match": {
              "location": "features/step_definitions/pidgin.rb:188"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "Then ",
            "name": "I receive a response from my friend",
            "line": 26,
            "match": {
              "location": "features/step_definitions/pidgin.rb:195"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 53781780
            }
          },
          {
            "output": [
              "SCENARIO FAILED: 'Chatting with some friend over XMPP' (at time 02:29:35)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6356/artifact/build-artifacts/02:29:35_Chatting_with_some_friend_over_XMPP.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6356/artifact/build-artifacts/02:29:35_Chatting_with_some_friend_over_XMPP.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6356/artifact/build-artifacts/02:29:35_Chatting_with_some_friend_over_XMPP.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6356/artifact/build-artifacts/02:29:35_Chatting_with_some_friend_over_XMPP.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 5264238542
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 1361342
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;using-a-persistent-pidgin-configuration",
        "keyword": "Scenario",
        "name": "Using a persistent Pidgin configuration",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 28
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16923
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3114469
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1769998
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8200324374
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19573376
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 18325439137
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 48828083
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6884479324
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 10022034498
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 36,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1064399349
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 37,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 11002168343
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 38,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 459408047
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 39,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 16533241951
            }
          },
          {
            "keyword": "When ",
            "name": "I close Pidgin",
            "line": 40,
            "match": {
              "location": "features/step_definitions/pidgin.rb:240"
            },
            "result": {
              "status": "passed",
              "duration": 15655737631
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of the configured Pidgin accounts",
            "line": 41,
            "match": {
              "location": "features/step_definitions/pidgin.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 10914192
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 20108053201
            }
          },
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 51200078
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 82011768006
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin has the expected persistent accounts configured",
            "line": 45,
            "match": {
              "location": "features/step_definitions/pidgin.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 18559524
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 9944610501
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 47,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 17824484019
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 7394192078
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1047277139
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 10332150
            }
          }
        ]
      }
    ]
  },
  {
    "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": 19888
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:544"
            },
            "result": {
              "status": "passed",
              "duration": 93574
            }
          }
        ],
        "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": 56757
            }
          },
          {
            "keyword": "Then ",
            "name": "no Qt5 package is installed",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 76690936
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:551"
            },
            "result": {
              "status": "passed",
              "duration": 327794
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 5921
            }
          }
        ]
      }
    ]
  },
  {
    "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": 7574
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3775407
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 93364246
            }
          },
          {
            "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": 9552930
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1017862271
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1757"
            },
            "result": {
              "status": "passed",
              "duration": 13192868386
            }
          },
          {
            "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": 2385334070
            }
          },
          {
            "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": 60176536637
            }
          },
          {
            "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": 350293087
            }
          },
          {
            "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": 2522363794
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 8676731378
            }
          },
          {
            "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": 1061215661
            }
          },
          {
            "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": 2471378908
            }
          },
          {
            "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": 39294
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 3960682306
            }
          },
          {
            "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": 2396832678
            }
          },
          {
            "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": 31648
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 508077632
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 123096040
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/sane_defaults.feature",
    "id": "tails-has-a-sane-default-configuration",
    "keyword": "Feature",
    "name": "Tails has a sane default configuration",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-has-a-sane-default-configuration;users-are-set-up-correctly",
        "keyword": "Scenario",
        "name": "Users are set up correctly",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14988
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2110326
            }
          }
        ],
        "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": 7007786009
            }
          },
          {
            "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": 105272946
            }
          },
          {
            "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": 58194912
            }
          },
          {
            "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": 157685278
            }
          },
          {
            "keyword": "And ",
            "name": "the root user owns its home directory which has strict permissions",
            "line": 9,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 102256410
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 838709738
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20007
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-network-services",
        "keyword": "Scenario",
        "name": "No unexpected network services",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11972
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3467401
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10744165663
            }
          },
          {
            "keyword": "Then ",
            "name": "no unexpected services are listening for network connections",
            "line": 14,
            "output": [
              "Service 'tor' is listening on 10.200.1.1:9050 but has an exception",
              "Service 'onion-grater' is listening on 0.0.0.0:951 but has an exception"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:177"
            },
            "result": {
              "status": "passed",
              "duration": 119858920
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 823537753
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21069
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;the-live-user-can-only-access-the-expected-local-services",
        "keyword": "Scenario",
        "name": "The live user can only access the expected local services",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12524
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3290791
            }
          }
        ],
        "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": 9665358834
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user can only access allowed local services",
            "line": 18,
            "output": [
              "amnesia could access tor on 127.0.0.1:5353 (UDP) as expected",
              "amnesia could access tor on 10.200.1.1:9050 (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",
              "amnesia could access onion-grater on 0.0.0.0:951 (TCP) as expected"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:192"
            },
            "result": {
              "status": "passed",
              "duration": 4991457063
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 542270836
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21491
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-dvd",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from DVD",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11581
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3408399
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 21,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6570072950
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 22,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 56387345
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 537384925
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19807
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-usb-drive",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from USB drive",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14617
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3340784
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7796603503
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 26,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 75039283
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 849895832
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19787
            }
          }
        ]
      }
    ]
  },
  {
    "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": 11351
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3776780
            }
          }
        ],
        "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": 8541868035
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 6,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 13907293811
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/home/amnesia/Persistent/Passwords.kdbx\" with contents \"\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1717"
            },
            "result": {
              "status": "passed",
              "duration": 5802298
            }
          },
          {
            "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:1721"
            },
            "result": {
              "status": "passed",
              "duration": 43479555
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9375761808
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 10002335513
            }
          },
          {
            "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": 2659453574
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1431478634
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 26229
            }
          }
        ]
      },
      {
        "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": 12974
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3349448
            }
          }
        ],
        "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": 6966584774
            }
          },
          {
            "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": 15939053
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 7943940433
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"MyPass.kdbx\" in Files",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1907"
            },
            "result": {
              "status": "passed",
              "duration": 5503071488
            }
          },
          {
            "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": 2410750600
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1407199680
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23624
            }
          }
        ]
      }
    ]
  },
  {
    "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": 11622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3483200
            }
          }
        ],
        "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": 11296215555
            }
          },
          {
            "keyword": "When ",
            "name": "I request a shutdown using the system menu",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 3121842797
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 10633674542
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 252704483
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 18675
            }
          }
        ]
      },
      {
        "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": 14697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4236572
            }
          }
        ],
        "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": 10167872913
            }
          },
          {
            "keyword": "When ",
            "name": "I request a reboot using the system menu",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 3085278474
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually restarts",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 42323434719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3704070891
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21030
            }
          }
        ]
      }
    ]
  },
  {
    "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": 13746
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3336084
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2170729
            }
          }
        ],
        "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": 9764665744
            }
          }
        ]
      },
      {
        "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": 35649162
            }
          },
          {
            "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": 254053418
            }
          },
          {
            "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": 6835533246
            }
          },
          {
            "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": 1221820884
            }
          },
          {
            "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": 6333163
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 189893546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1027986801
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 70873
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11372
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3482028
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1879513
            }
          }
        ],
        "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": 9643252032
            }
          }
        ]
      },
      {
        "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": 168304911
            }
          },
          {
            "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": 96188610
            }
          },
          {
            "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": 5840048114
            }
          },
          {
            "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": 1601544899
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 177365647
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 669789694
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 616767
            }
          }
        ]
      }
    ]
  },
  {
    "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": 13014
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3440060
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1741053
            }
          }
        ],
        "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": 9852407928
            }
          },
          {
            "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": 51674847
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2865167575
            }
          },
          {
            "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": 1024401845
            }
          }
        ]
      },
      {
        "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": 2286717020
            }
          },
          {
            "keyword": "When ",
            "name": "I open Thunderbird's Add-ons Manager",
            "line": 14,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1614540022
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Extensions tab",
            "line": 15,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:67"
            },
            "result": {
              "status": "passed",
              "duration": 1063156712
            }
          },
          {
            "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": 10602917222
            }
          },
          {
            "keyword": "And ",
            "name": "no unexpected connection has leaked from Thunderbird",
            "line": 17,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:244"
            },
            "result": {
              "status": "passed",
              "duration": 408933391
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 266937713
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 703153302
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 113022
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 10709
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3516934
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2238897
            }
          }
        ],
        "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": 9584626824
            }
          },
          {
            "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": 62049728
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2814413994
            }
          },
          {
            "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": 1260703216
            }
          }
        ]
      },
      {
        "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": 8400176018
            }
          },
          {
            "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": 200781735
            }
          },
          {
            "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": 210127496
            }
          },
          {
            "keyword": "When ",
            "name": "I accept the autoconfiguration wizard's configuration",
            "line": 23,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 17021674604
            }
          },
          {
            "keyword": "And ",
            "name": "I send an email to myself",
            "line": 24,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 5643617492
            }
          },
          {
            "keyword": "And ",
            "name": "I fetch my email",
            "line": 25,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:127"
            },
            "result": {
              "status": "passed",
              "duration": 1249096344
            }
          },
          {
            "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": 5278067740
            }
          },
          {
            "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": 532630967
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 539735095
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1141023466
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 128520
            }
          }
        ]
      }
    ]
  },
  {
    "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": 13997
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3344491
            }
          }
        ],
        "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": 7069290502
            }
          }
        ]
      },
      {
        "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:1156"
            },
            "result": {
              "status": "passed",
              "duration": 8593919310
            }
          },
          {
            "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": 1208674584
            }
          },
          {
            "keyword": "When ",
            "name": "I plug a Wi-Fi adapter",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:1211"
            },
            "result": {
              "status": "passed",
              "duration": 189250666
            }
          },
          {
            "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": 733756124
            }
          },
          {
            "keyword": "And ",
            "name": "I click on the Wi-Fi settings",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:1220"
            },
            "result": {
              "status": "passed",
              "duration": 1093009732
            }
          },
          {
            "keyword": "And ",
            "name": "The Wi-Fi settings are displayed",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1224"
            },
            "result": {
              "status": "passed",
              "duration": 2091888341
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 820531035
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21490
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11932
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3562219
            }
          }
        ],
        "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": 6534743435
            }
          }
        ]
      },
      {
        "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": 13510920
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 720 seconds",
            "line": 37,
            "output": [
              "Slept for 720 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1361"
            },
            "result": {
              "status": "passed",
              "duration": 720000138746
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 8392967817
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:752"
            },
            "result": {
              "status": "passed",
              "duration": 31625112
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1088675276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21291
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12514
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3435963
            }
          }
        ],
        "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": 6461445898
            }
          }
        ]
      },
      {
        "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": 19579279
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1873957835
            }
          },
          {
            "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": 3831146094
            }
          },
          {
            "keyword": "And ",
            "name": "I choose to connect to Tor automatically",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1170510065
            }
          },
          {
            "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": 90762235
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 700624539
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20307
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13976
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3594199
            }
          }
        ],
        "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": 6506573530
            }
          }
        ]
      },
      {
        "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": 1195421301
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17359968
            }
          },
          {
            "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": 1116892071
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 675298707
            }
          },
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1446735619
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1136744540
            }
          },
          {
            "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": 25965207276
            }
          },
          {
            "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": 10572670863
            }
          },
          {
            "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": 83578598
            }
          },
          {
            "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": 4880336577
            }
          },
          {
            "keyword": "And ",
            "name": "I log-in to the Captive Portal",
            "line": 61,
            "match": {
              "location": "features/step_definitions/browser.rb:470"
            },
            "result": {
              "status": "passed",
              "duration": 4843984210
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 122839127
            }
          },
          {
            "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": 1120202799
            }
          },
          {
            "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": 63674290
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1121896464
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 4999628494
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 864031808
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 742804
            }
          }
        ]
      }
    ]
  },
  {
    "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": 11551
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3404774
            }
          }
        ],
        "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": 9611608346
            }
          },
          {
            "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": 53421357
            }
          },
          {
            "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": 149665624
            }
          },
          {
            "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": 49648455
            }
          },
          {
            "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": 44210489
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 783244710
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21200
            }
          }
        ]
      },
      {
        "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": 10540
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3807689
            }
          }
        ],
        "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": 9576060270
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5918977
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6137895951
            }
          },
          {
            "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": 7159299820
            }
          },
          {
            "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": 274490983
            }
          },
          {
            "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": 446606338
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 577802024
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53911628
            }
          }
        ]
      },
      {
        "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": 16400
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3682324
            }
          }
        ],
        "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": 9745137055
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4182882
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 27,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 118718822
            }
          },
          {
            "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": 364273795
            }
          },
          {
            "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": 40464596
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 874782076
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 53272689
            }
          }
        ]
      },
      {
        "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": 12343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3545227
            }
          }
        ],
        "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": 9618554950
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4388838
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 34,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 107748103
            }
          },
          {
            "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": 189992099
            }
          },
          {
            "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": 37789320
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 789719154
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37130274
            }
          }
        ]
      },
      {
        "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": 13704
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3397921
            }
          }
        ],
        "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": 9678801113
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4040476
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 41,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 113898502
            }
          },
          {
            "keyword": "When ",
            "name": "I send some ICMP pings",
            "line": 42,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4061018325
            }
          },
          {
            "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": 43389981
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 813936315
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 38556498
            }
          }
        ]
      },
      {
        "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": 17062
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3400254
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2001653
            }
          }
        ],
        "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": 9666159593
            }
          },
          {
            "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": 1244401091
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 43101
            }
          },
          {
            "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": 68218881
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 159334126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 611197721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 72836
            }
          }
        ]
      },
      {
        "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": 19166
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4590166
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2888656
            }
          }
        ],
        "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": 9479612245
            }
          },
          {
            "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": 1277204390
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 45485
            }
          },
          {
            "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": 71507055
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 178134073
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 671247795
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 65252
            }
          }
        ]
      },
      {
        "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": 14708
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3411726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2371936
            }
          }
        ],
        "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": 9650811163
            }
          },
          {
            "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": 5270602421
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 42169
            }
          },
          {
            "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": 65935839
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 170194167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 545994243
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 71565
            }
          }
        ]
      },
      {
        "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": 12023
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3388383
            }
          }
        ],
        "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": 6398482371
            }
          },
          {
            "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": 10135411
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17994367
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 9237528826
            }
          },
          {
            "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": 5931169
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 524062564
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21250
            }
          }
        ]
      }
    ]
  },
  {
    "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": 11391
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 5708302
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 6481682
            }
          }
        ],
        "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": 9636923249
            }
          }
        ]
      },
      {
        "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": 73127281
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-security-check",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:346"
            },
            "result": {
              "status": "passed",
              "duration": 112522891
            }
          },
          {
            "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": 10006033326
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 211394407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1133922531
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 84499
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13406
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3357525
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2231113
            }
          }
        ],
        "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": 9580260669
            }
          }
        ]
      },
      {
        "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": 56216055
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run htpdate",
            "line": 18,
            "match": {
              "location": "features/step_definitions/tor.rb:353"
            },
            "result": {
              "status": "passed",
              "duration": 2262883459
            }
          },
          {
            "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": 5605320
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 293353496
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1015271873
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 77244
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12231
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3387149
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1856690
            }
          }
        ],
        "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": 9643812106
            }
          }
        ]
      },
      {
        "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": 47350703
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-upgrade-frontend-wrapper",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:360"
            },
            "result": {
              "status": "passed",
              "duration": 33290136904
            }
          },
          {
            "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": 6886431
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 258431323
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1340646117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 77996
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13125
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3469946
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1897406
            }
          }
        ],
        "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": 9547962033
            }
          }
        ]
      },
      {
        "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": 48540375
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 7711387677
            }
          },
          {
            "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": 10339203620
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 31,
            "match": {
              "location": "features/step_definitions/browser.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 461618186
            }
          },
          {
            "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": 31908764
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 558351213
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 3001683020
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 205705
            }
          }
        ]
      }
    ]
  },
  {
    "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": 13385
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3638411
            }
          }
        ],
        "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": 9664780071
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1282"
            },
            "result": {
              "status": "passed",
              "duration": 1020833728
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2331350
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 11,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6496063701
            }
          },
          {
            "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:1351"
            },
            "result": {
              "status": "passed",
              "duration": 3913090030
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser shows the \"Unable to connect\" error",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:376"
            },
            "result": {
              "status": "passed",
              "duration": 100604164
            }
          },
          {
            "keyword": "And ",
            "name": "no traffic was sent to the web server on the LAN",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1355"
            },
            "result": {
              "status": "passed",
              "duration": 20783405
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1038872217
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40139064
            }
          }
        ]
      },
      {
        "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": 15881
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3611101
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3088791
            }
          }
        ],
        "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": 9730977717
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 49942724
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14250744390
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6760293279
            }
          },
          {
            "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": 5198793411
            }
          },
          {
            "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": 3161226825
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 194578158
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1435244722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 80661
            }
          }
        ]
      },
      {
        "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": 11822
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 10603599
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 22518418
            }
          }
        ],
        "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": 9760582063
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6412227758
            }
          },
          {
            "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": 11440466597
            }
          },
          {
            "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": 384557653
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 527059261
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 685240726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 263475
            }
          }
        ]
      },
      {
        "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": 15048
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3742868
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 5407206
            }
          }
        ],
        "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": 9773589259
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 35,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6710667175
            }
          },
          {
            "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": 36993781596
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 6536757671
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1111175560
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 2425237
            }
          }
        ]
      },
      {
        "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": 12263
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4172092
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2032641
            }
          }
        ],
        "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": 9728411202
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 41,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6715020836
            }
          },
          {
            "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": 7060296703
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 229166221
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 979048573
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 77135
            }
          }
        ]
      },
      {
        "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": 13726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4046316
            }
          }
        ],
        "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": 9780683497
            }
          },
          {
            "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:1029"
            },
            "result": {
              "status": "passed",
              "duration": 45934671
            }
          },
          {
            "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:1029"
            },
            "result": {
              "status": "passed",
              "duration": 52267242
            }
          },
          {
            "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:1029"
            },
            "result": {
              "status": "passed",
              "duration": 38188198
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:998"
            },
            "result": {
              "status": "passed",
              "duration": 63851662
            }
          },
          {
            "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:998"
            },
            "result": {
              "status": "passed",
              "duration": 31413425
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:998"
            },
            "result": {
              "status": "passed",
              "duration": 46453202
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/tmp/synaptic.html\" exists",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:998"
            },
            "result": {
              "status": "passed",
              "duration": 44672655
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"torbrowser_firefox\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1371"
            },
            "result": {
              "status": "passed",
              "duration": 103981219
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6398578997
            }
          },
          {
            "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": 7130538546
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 371736379
            }
          },
          {
            "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:1384"
            },
            "result": {
              "status": "passed",
              "duration": 45222265
            }
          },
          {
            "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": 4364806673
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 329980936
            }
          },
          {
            "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": 3979164696
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 333733790
            }
          },
          {
            "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": 3888403102
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 331488573
            }
          },
          {
            "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": 3932343453
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 348178283
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 565524114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22803
            }
          }
        ]
      },
      {
        "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": 13995
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4801251
            }
          }
        ],
        "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": 9801139234
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 69,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6227269244
            }
          },
          {
            "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": 858435154
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 946600622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20218
            }
          }
        ]
      },
      {
        "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": 11661
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4275266
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2203210
            }
          }
        ],
        "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": 9886738934
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6568373017
            }
          },
          {
            "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": 6736781661
            }
          },
          {
            "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": 92556262
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 2 tabs open",
            "line": 78,
            "match": {
              "location": "features/step_definitions/browser.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 63097219
            }
          },
          {
            "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": 3205536619
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads about:tor",
            "line": 80,
            "match": {
              "location": "features/step_definitions/browser.rb:521"
            },
            "result": {
              "status": "passed",
              "duration": 1412945433
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 1 tab open",
            "line": 81,
            "match": {
              "location": "features/step_definitions/browser.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 74983835
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 220688506
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1330195578
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 77746
            }
          }
        ]
      },
      {
        "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": 12343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3452412
            }
          }
        ],
        "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": 9698053198
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 88,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6685914096
            }
          },
          {
            "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": 9967565465
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 90,
            "match": {
              "location": "features/step_definitions/browser.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 279027722
            }
          },
          {
            "keyword": "And ",
            "name": "Tor Browser's circuit view is working",
            "line": 91,
            "match": {
              "location": "features/step_definitions/browser.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 1308376424
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1356938822
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19788
            }
          }
        ]
      },
      {
        "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": 13927
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3335463
            }
          }
        ],
        "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": 9701533928
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 95,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6649728560
            }
          },
          {
            "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": 6721613456
            }
          },
          {
            "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": 122961708
            }
          },
          {
            "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": 7164639445
            }
          },
          {
            "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": 152481343
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 933922430
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21160
            }
          }
        ]
      },
      {
        "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": 14748
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3364288
            }
          }
        ],
        "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": 8251181386
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16730518
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 19146275556
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 47614222
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 3253626522
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Persistent directory",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14818772496
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 108,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 6815644159
            }
          },
          {
            "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": 11422695072
            }
          },
          {
            "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": 409497038
            }
          },
          {
            "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": 7405031088
            }
          },
          {
            "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": 409748709
            }
          },
          {
            "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": 9113086124
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 816251599
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19897
            }
          }
        ]
      },
      {
        "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": 15609
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3757456
            }
          }
        ],
        "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": 6802993153
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 48282131
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14835860235
            }
          },
          {
            "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": 9544054725
            }
          },
          {
            "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": 7246214850
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 761766418
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21369
            }
          }
        ]
      },
      {
        "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": 12714
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3401627
            }
          }
        ],
        "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": 6516934400
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 54719001
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14614411920
            }
          },
          {
            "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": 9601777084
            }
          },
          {
            "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": 7161964902
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 820286939
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20587
            }
          }
        ]
      },
      {
        "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": 11070
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3489203
            }
          }
        ],
        "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": 6566620042
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 46743057
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14685467151
            }
          },
          {
            "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": 9363426878
            }
          },
          {
            "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": 6774670326
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1187125320
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21250
            }
          }
        ]
      },
      {
        "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": 15419
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4381705
            }
          }
        ],
        "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": 6516408160
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 37133420
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14675792667
            }
          },
          {
            "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": 9140808719
            }
          },
          {
            "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": 7542936331
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 882709390
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22572
            }
          }
        ]
      },
      {
        "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": 11682
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3382613
            }
          }
        ],
        "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": 6561220646
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1259"
            },
            "result": {
              "status": "passed",
              "duration": 57365835
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1263"
            },
            "result": {
              "status": "passed",
              "duration": 14739438559
            }
          },
          {
            "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": 8955964697
            }
          },
          {
            "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": 7080802483
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 840016681
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20708
            }
          }
        ]
      },
      {
        "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": 13906
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3452604
            }
          }
        ],
        "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": 7892973149
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1094680934
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 132,
            "match": {
              "location": "features/step_definitions/usb.rb:972"
            },
            "result": {
              "status": "passed",
              "duration": 250557673
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 133,
            "match": {
              "location": "features/step_definitions/usb.rb:989"
            },
            "result": {
              "status": "passed",
              "duration": 428442173
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1017"
            },
            "result": {
              "status": "passed",
              "duration": 1812501335
            }
          },
          {
            "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": 11545474682
            }
          },
          {
            "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": 8127401310
            }
          },
          {
            "keyword": "And ",
            "name": "I cold reboot the computer",
            "line": 137,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 6203966501
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 35458048690
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 6929190998
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 140,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9141373311
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 141,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7828208939
            }
          },
          {
            "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": 8344459720
            }
          },
          {
            "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": 854897257
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 881614620
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 6913451
            }
          }
        ]
      }
    ]
  },
  {
    "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": 15699
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2084379
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2152386
            }
          }
        ],
        "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": 10253101807
            }
          }
        ]
      },
      {
        "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": 5089220436
            }
          },
          {
            "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": 195218180
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 200570424
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 988462732
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 77706
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14817
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3480776
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1834088
            }
          }
        ],
        "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": 9555561999
            }
          }
        ]
      },
      {
        "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": 168032769
            }
          },
          {
            "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": 9154120888
            }
          },
          {
            "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": 201981751
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 230796806
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 948590984
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 83605
            }
          }
        ]
      }
    ]
  },
  {
    "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": 11602
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3387612
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 3953353
            }
          }
        ],
        "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": 9639685792
            }
          }
        ]
      },
      {
        "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": 229086779
            }
          },
          {
            "keyword": "Then ",
            "name": "the wget command is successful",
            "line": 9,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 44294
            }
          },
          {
            "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": 20479
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 160797431
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 666315036
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 68199
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12062
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3615980
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1930230
            }
          }
        ],
        "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": 9699466831
            }
          }
        ]
      },
      {
        "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": 305377006
            }
          },
          {
            "keyword": "Then ",
            "name": "the curl command is successful",
            "line": 14,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 52539
            }
          },
          {
            "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": 18295
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 160721739
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 517856789
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 70412
            }
          }
        ]
      }
    ]
  },
  {
    "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 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": 13316
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3413541
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 151187052
            }
          }
        ]
      },
      {
        "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": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6705897451
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 12,
            "match": {
              "location": "features/step_definitions/totem.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 8289559237
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia\" as user \"amnesia\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 50973973
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/video.mp4\" exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:998"
            },
            "result": {
              "status": "passed",
              "duration": 43622819
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/video.mp4\" with Totem",
            "line": 15,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4163351490
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"SampleLocalMp4VideoFrame.png\" after at most 40 seconds",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1526567148
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 814330568
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 509797
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13446
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3308803
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1876749
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 129344070
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-a-webm-video-over-https",
        "keyword": "Scenario",
        "name": "Watching a WebM video over HTTPS",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 18
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9782826638
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video over HTTPs",
            "line": 21,
            "match": {
              "location": "features/step_definitions/totem.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 9032270387
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 268074128
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 992065444
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 158037
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12253
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3310105
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 129790736
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-mp4-videos-stored-in-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Watching MP4 videos stored in the Persistent Storage",
        "description": "",
        "line": 23,
        "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": 24,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7436443187
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 25,
            "match": {
              "location": "features/step_definitions/totem.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 7780690482
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 26,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 56522165
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/video.mp4\" with Totem",
            "line": 27,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 3874959213
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"SampleLocalMp4VideoFrame.png\" after at most 40 seconds",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1865753040
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 632678852
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 482334
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/uefi_ca.feature",
    "id": "user-gets-actionable-info-about-uefi-ca-expiry",
    "keyword": "Feature",
    "name": "User gets actionable info about UEFI CA expiry",
    "description": "  As a Tails user\n  When I'm using a computer which has Secure Boot, but doesn't have the Microsoft 2023 CA\n  Then I get a notification telling me what to do",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-warned-about-uefi-ca-expiry",
        "keyword": "Scenario",
        "name": "I am warned about UEFI CA expiry",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13395
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3165935
            }
          }
        ],
        "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": 7717808173
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with old UEFI CA",
            "line": 9,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 15111072
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11196747873
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7666770292
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 12,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 36907379
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Secure Boot Update Needed\" notification after at most 20 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 1185165703
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Secure Boot documentation from the notification",
            "line": 14,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 10801141464
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1500331333
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21119
            }
          }
        ]
      },
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-not-warned-if-the-uefi-ca-is-up-to-date",
        "keyword": "Scenario",
        "name": "I am not warned if the UEFI CA is up-to-date",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12424
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3347997
            }
          }
        ],
        "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": 7055751554
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with new UEFI CA",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 11678406
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11084540912
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7487812035
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 21,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 49283003
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until amnesia's tails-uefi-ca-notify-user.service has completed",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1913"
            },
            "result": {
              "status": "passed",
              "duration": 1097219134
            }
          },
          {
            "keyword": "And ",
            "name": "I don't see the \"Secure Boot Update Needed\" notification after at most 10 seconds",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 10640525530
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1169977481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21840
            }
          }
        ]
      }
    ]
  },
  {
    "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": 10350
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3315185
            }
          }
        ],
        "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": 6986231698
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the Unsafe Browser",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:585"
            },
            "result": {
              "status": "passed",
              "duration": 7887034395
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10656509418
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16755164
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7980342374
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 98938152
            }
          },
          {
            "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": 1149029251
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1177009194
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20549
            }
          }
        ]
      },
      {
        "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": 12334
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3277476
            }
          }
        ],
        "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": 10461261740
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1282"
            },
            "result": {
              "status": "passed",
              "duration": 1022800403
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6402401680
            }
          },
          {
            "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:1351"
            },
            "result": {
              "status": "passed",
              "duration": 3790146464
            }
          },
          {
            "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": 156504675
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 930503514
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 723236
            }
          }
        ]
      },
      {
        "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": 12252
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3321016
            }
          }
        ],
        "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": 9794339883
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 26,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5932681848
            }
          },
          {
            "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": 198004796
            }
          },
          {
            "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": 409956963
            }
          },
          {
            "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": 404297552
            }
          },
          {
            "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": 4106291147
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no bookmarks",
            "line": 31,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 3949347287
            }
          },
          {
            "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": 788993120
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 652646490
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20368
            }
          }
        ]
      },
      {
        "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": 12704
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3304977
            }
          }
        ],
        "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": 9785079491
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 37,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5773249304
            }
          },
          {
            "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": 7329045622
            }
          },
          {
            "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": 341773735
            }
          },
          {
            "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": 63551495
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 952165010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21619
            }
          }
        ]
      },
      {
        "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": 12824
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3393743
            }
          }
        ],
        "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": 9797651555
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5633629153
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 120777711
            }
          },
          {
            "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:629"
            },
            "result": {
              "status": "passed",
              "duration": 945061081
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser chroot is torn down",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 87534682
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 669260491
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 19998
            }
          }
        ]
      },
      {
        "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": 12493
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3369710
            }
          }
        ],
        "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": 9739515620
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5635277723
            }
          },
          {
            "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:1361"
            },
            "result": {
              "status": "passed",
              "duration": 10000155442
            }
          },
          {
            "keyword": "And ",
            "name": "I try to start the Unsafe Browser",
            "line": 59,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 60322450
            }
          },
          {
            "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": 1224171833
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1107213955
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 21030
            }
          }
        ]
      },
      {
        "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": 13465
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3424240
            }
          }
        ],
        "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": 9573862523
            }
          },
          {
            "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": 99013795
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 65,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6040813317
            }
          },
          {
            "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": 4047716069
            }
          },
          {
            "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": 190510064
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 856478809
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22602
            }
          }
        ]
      },
      {
        "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": 16771
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 4385303
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 2223519
            }
          }
        ],
        "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": 9591825923
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3856501
            }
          },
          {
            "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": 18606877
            }
          },
          {
            "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": 5043898
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6271572827
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 120 seconds",
            "line": 76,
            "output": [
              "Slept for 120 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1361"
            },
            "result": {
              "status": "passed",
              "duration": 120000147170
            }
          },
          {
            "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": 444260488
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 292317709
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 657740643
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 61263143
            }
          }
        ]
      },
      {
        "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": 14877
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3422566
            }
          }
        ],
        "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": 9658537453
            }
          },
          {
            "keyword": "And ",
            "name": "the network is unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 7637449
            }
          },
          {
            "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:1361"
            },
            "result": {
              "status": "passed",
              "duration": 10000145356
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 85,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 78751411
            }
          },
          {
            "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": 3270232232
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 953599190
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 22703
            }
          }
        ]
      }
    ]
  },
  {
    "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": 11862
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3398702
            }
          }
        ],
        "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": 6767834395
            }
          }
        ]
      },
      {
        "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": 10634551293
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1362251702
            }
          },
          {
            "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": 4365925344
            }
          },
          {
            "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": 1674400813
            }
          },
          {
            "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": 246839490
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 18,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1201743846
            }
          },
          {
            "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": 100963869
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 856089766
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 323326
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 11591
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3775820
            }
          }
        ],
        "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": 6448331160
            }
          }
        ]
      },
      {
        "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": 19549537395
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1345257527
            }
          },
          {
            "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": 5432213601
            }
          },
          {
            "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": 1665139457
            }
          },
          {
            "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": 237351524
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 27,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1230204152
            }
          },
          {
            "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": 89746717
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 716208536
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 281219
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13556
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3381167
            }
          }
        ],
        "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": 6548484167
            }
          }
        ]
      },
      {
        "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": 7942894390
            }
          },
          {
            "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": 5903209179
            }
          },
          {
            "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": 1196593897
            }
          },
          {
            "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": 325238292
            }
          },
          {
            "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": 1221785780
            }
          },
          {
            "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": 81624719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 964243972
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 382867
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 15930
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3255895
            }
          }
        ],
        "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": 18426212625
            }
          }
        ]
      },
      {
        "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": 26223724277
            }
          },
          {
            "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": 7531315043
            }
          },
          {
            "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": 1759312085
            }
          },
          {
            "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": 97745724
            }
          },
          {
            "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": 1193842279
            }
          },
          {
            "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": 81742149
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 935671070
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 11169040
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 16491
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3368866
            }
          }
        ],
        "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": 6414545468
            }
          }
        ]
      },
      {
        "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": 19872257332
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1478301594
            }
          },
          {
            "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": 9593377576
            }
          },
          {
            "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": 1573529387
            }
          },
          {
            "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": 271932305
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 54,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1203533891
            }
          },
          {
            "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": 83252982
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 680320741
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 290245
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3281894
            }
          }
        ],
        "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": 6544305978
            }
          }
        ]
      },
      {
        "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": 19410598448
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1264681156
            }
          },
          {
            "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": 6905379850
            }
          },
          {
            "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": 1511051496
            }
          },
          {
            "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": 269432176
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 63,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1223259919
            }
          },
          {
            "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": 76633359
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 980928534
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 383108
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 12664
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3452764
            }
          }
        ],
        "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": 6458672408
            }
          }
        ]
      },
      {
        "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": 26690304348
            }
          },
          {
            "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": 19260235931
            }
          },
          {
            "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": 1690178936
            }
          },
          {
            "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": 118087050
            }
          },
          {
            "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": 1233153210
            }
          },
          {
            "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": 87039750
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 733359259
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9415654
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 13284
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3797800
            }
          }
        ],
        "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": 6470695581
            }
          }
        ]
      },
      {
        "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": 26201397207
            }
          },
          {
            "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": 15935810253
            }
          },
          {
            "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": 1723710036
            }
          },
          {
            "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": 93675490
            }
          },
          {
            "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": 1255103760
            }
          },
          {
            "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": 99739680
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1190464189
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 9321276
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 14597
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3409242
            }
          }
        ],
        "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": 6479070551
            }
          }
        ]
      },
      {
        "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": 7636076728
            }
          },
          {
            "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": 15287890680
            }
          },
          {
            "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": 1187708432
            }
          },
          {
            "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": 321789669
            }
          },
          {
            "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": 1212642049
            }
          },
          {
            "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": 87494072
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 980081955
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 377288
            }
          }
        ]
      }
    ]
  },
  {
    "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": 11691
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3433288
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:519"
            },
            "result": {
              "status": "passed",
              "duration": 1911313
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 50467491
            }
          },
          {
            "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": 30228
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 678957089
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 33014520955
            }
          },
          {
            "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": 159049150
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 7475392568
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7877389808
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 9769397
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4688112423
            }
          }
        ]
      },
      {
        "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": 29750866713
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 2112883625
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2181907296
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:527"
            },
            "result": {
              "status": "passed",
              "duration": 1668655270
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 626648843
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 8135393
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:266"
            },
            "result": {
              "status": "passed",
              "duration": 19326
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 2624670
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 60821793
            }
          },
          {
            "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": 27201
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 778512798
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 33255409388
            }
          },
          {
            "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": 193450387
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 8049699408
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7628903025
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 29207200
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4774195676
            }
          }
        ]
      },
      {
        "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": 4466018661
            }
          },
          {
            "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": 228143272
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 762531354
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 42610439
            }
          }
        ]
      }
    ]
  },
  {
    "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": 17623
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3838396
            }
          }
        ],
        "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": 6642092845
            }
          },
          {
            "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:1800"
            },
            "result": {
              "status": "passed",
              "duration": 78706726
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 993756884
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20098
            }
          }
        ]
      },
      {
        "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": 12443
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3551018
            }
          }
        ],
        "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": 6539144368
            }
          },
          {
            "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:1795"
            },
            "result": {
              "status": "passed",
              "duration": 549014445
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 727036205
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 20578
            }
          }
        ]
      },
      {
        "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": 13265
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 3632451
            }
          }
        ],
        "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": 6625485918
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"WhisperBack\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1156"
            },
            "result": {
              "status": "passed",
              "duration": 8613374098
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack has debugging information",
            "line": 19,
            "match": {
              "location": "features/step_definitions/whisperback.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 1949994147
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:331"
            },
            "result": {
              "status": "passed",
              "duration": 1477706136
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 24857
            }
          }
        ]
      }
    ]
  }
]