<!doctype html>
<!-- Generated by chromite/licensing/licenses; do not edit.
     See https://dev.chromium.org/chromium-os/licensing/licensing-for-chromiumos-developers
-->
<html>
<head>
<meta charset="UTF-8">
{{tainted_warning_if_any}}
<title>Credits</title>
<link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
<style>
body {
  background-color:white;
  font-size:84%;
  max-width:1020px;
}
.page-title {
  font-size:164%;
  font-weight:bold;
}
.product {
  background-color:#c3d9ff;
  overflow:auto;
  padding:2px;
  margin-top:3px;
  border-radius:5px;
}
.product .title {
  font-size:110%;
  font-weight:bold;
  float:left;
  margin:3px;
}
.product .homepage {
  text-align:right;
  float:right;
  margin:3px;
}
.product .homepage:after {
  content:" - ";
}
.product .show {
  text-align:right;
  float:right;
  margin:3px;
}
.licence {
  clear:both;
  background-color:#e8eef7;
  padding:3px;
  border-radius:3px;
  display:none;
}
.licence pre {
  white-space: pre-wrap
}
.licence h3 {
  margin-top:0px;
}
.license-packages {
  font-size:80%;
}
.dialog #print-link {
  display: none;
}
.dialog .homepage {
  display: none;
}

@media print {
  div.licence {
    display: block;
  }
  a.show {
    display: none;
  }
  .homepage {
    display: none;
  }
  a.print-link {
    display: none;
  }
}
</style>
<script>
//<![CDATA[
function toggle(o) {
  var licence = o.nextSibling;

  while (licence.className != 'licence') {
    if (!licence) return false;
    licence = licence.nextSibling;
  }
  return toggleblock(licence, o);
}

function toggleblock(licence, o) {
  if (licence.style && licence.style.display == 'block') {
    licence.style.display = 'none';
    o.innerHTML = 'show license text';
  } else {
    licence.style.display = 'block';
    o.innerHTML = 'hide license text';
  }
  return false;
}
//]]>
</script>
</head>
<body>
<span class="page-title" style="float:left;">Credits</span>
<span style="float:right">
<a id="print-link" href="javascript:window.print();">Print</a>
</span>
<div style="clear:both; overflow:auto;">
<h2>List of Packages used in Google Chrome OS</h2>
<!-- Chromium <3s the following projects -->
{{entries}}
</div>

<h2>List of Shared Licenses used in Google Chrome OS</h2>
{{licenses}}

</body>
</html>
