<!--
  The MIT License

  Copyright (C) 2011-2021 Google, Inc.

  Permission is hereby granted, free of charge, to any person obtaining a copy of
  this software and associated documentation files (the "Software"), to deal in
  the Software without restriction, including without limitation the rights to
  use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
  of the Software, and to permit persons to whom the Software is furnished to do
  so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

  adapted from node_modules/karma/static/context.html.
-->
<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
</head>
<body>
  <script src="context.js"></script>
  <script src="debug.js"></script>
  <script type="text/javascript">
    %CLIENT_CONFIG%
    %SCRIPT_URL_ARRAY%
    window.__karma__.setupContext(window);
    %MAPPINGS%
  </script>
  %SCRIPTS%
  <script type="module">
    // Relying on the script module loading order is not sufficient if modules
    // use top-level awaits so we need to wait till all modules are actually
    // imported.
    await Promise.all(
        Array.from(document.body.querySelectorAll('script[type=module]')).map(script => {
            if (script.src) {
                return import(script.src);
            }
        })
    );
    window.__karma__.loaded();
  </script>
  <script nomodule>
    window.__karma__.loaded();
  </script>
</body>
</html>
