<footer id="footer" class="footer">
  <svg class="ani-logo" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 84 84">
    <g fill="none" fill-rule="evenodd">
      <rect class="center item" width="24" height="24" x="30" y="30" />
      <path class="ul item" d="M19 19h27v10.5c0 .8-.7 1.5-1.5 1.5H31v13.5c0 .8-.7 1.5-1.5 1.5H19V19z" />
      <path class="ll item" d="M19 65h27V54.5c0-.8-.7-1.5-1.5-1.5H31V39.5c0-.8-.7-1.5-1.5-1.5H19v27z" />
      <path class="ur item" d="M65 19H38v10.5c0 .8.7 1.5 1.5 1.5H53v13.5c0 .8.7 1.5 1.5 1.5H65V19z" />
      <path class="lr item" d="M65 65H38V54.5c0-.8.7-1.5 1.5-1.5H53V39.5c0-.8.7-1.5 1.5-1.5H65v27z" />
      <path class="right item item--outer"
        d="M82.5 48c.8 0 1.5.7 1.5 1.5v9c0 .8-.7 1.5-1.5 1.5H69V48h13.5zm0-24c.8 0 1.5.7 1.5 1.5v9c0 .8-.7 1.5-1.5 1.5H69V24h13.5z" />
      <path class="left item item--outer"
        d="M15 48v12H1.5C.7 60 0 59.3 0 58.5v-9c0-.8.7-1.5 1.5-1.5H15zm0-24v12H1.5C.7 36 0 35.3 0 34.5v-9c0-.8.7-1.5 1.5-1.5H15z" />
      <path class="top item item--outer"
        d="M34.5 0c.8 0 1.5.7 1.5 1.5V15H24V1.5c0-.8.7-1.5 1.5-1.5h9zm24 0c.8 0 1.5.7 1.5 1.5V15H48V1.5c0-.8.7-1.5 1.5-1.5h9z" />
      <path class="bottom item item--outer"
        d="M60 69v13.5c0 .8-.7 1.5-1.5 1.5h-9c-.8 0-1.5-.7-1.5-1.5V69h12zm-24 0v13.5c0 .8-.7 1.5-1.5 1.5h-9c-.8 0-1.5-.7-1.5-1.5V69h12z" />
    </g>
  </svg>

  <nav class="footer-nav" aria-label="Full">
    <ul class="footer-nav__list">
      <li class="footer-nav__item">
        <a href="https://opentitan.org">Home</a>
      </li>
      <li class="footer-nav__item">
        <a href="https://docs.opentitan.org">Documentation</a>
      </li>
      <li class="footer-nav__item footer-nav__item--icons">
        <a href="https://github.com/lowRISC/opentitan" aria-label="View on Github">
          <svg focusable="false" width="24" height="20" viewBox="0 0 24 20">
            <path fill="currentColor" fill-rule="evenodd"
              d="M11.4 1A9 9 0 002 10c0 4.2 2.7 7.7 6.5 9 .5 0 .7-.2.7-.5v-2.2s-2.7.5-3.3-1.2c0 0-.4-1-1-1.3 0 0-1-.6 0-.6 0 0 1 0 1.5 1 .8 1.4 2.2 1 2.8.7 0-.6.3-1 .6-1.2-2.1-.2-4.3-.5-4.3-4.1 0-1 .3-1.6.9-2.2C6.3 7 6 6 6.5 4.9c.8-.3 2.6 1 2.6 1a9.3 9.3 0 014.9 0s1.8-1.3 2.6-1c.6 1.2.2 2.2.1 2.5.6.6 1 1.2 1 2.2 0 3.6-2.2 3.9-4.4 4 .4.4.7 1 .7 1.8v3.1c0 .3.1.6.6.5a9.3 9.3 0 006.5-9c0-5-4.4-9-9.7-9z" />
          </svg>
        </a>
      </li>
    </ul>
  </nav>

  <p>© 2019 &ndash; {{ now.Format "2006" }} <a href="https://www.lowrisc.org">lowRISC</a> contributors, <a
    href="https://opentitan.org/usage-policy/">Usage Policy</a>, <a
    href="https://opentitan.org/privacy-policy/">Privacy Policy</a>.</p>
  <p>No license is granted for the OpenTitan logo or other trademarks. <a
    href="https://opentitan.org/trademark-usage-policy/">Trademark Usage
    Policy</a>.</p>
</footer>

<script type="text/javascript"
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/wavedrom/2.1.2/skins/default.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/wavedrom/2.1.2/wavedrom.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/markdown-it/10.0.0/markdown-it.min.js"></script>

<script>
  // Wrap tables
  const tables = document.getElementsByTagName('table');
  for (let i = 0; i < tables.length; i++) {
    const table = tables[i];
    const wrapper = document.createElement('div');
    wrapper.setAttribute('class', 'overflow-table');
    table.parentNode.insertBefore(wrapper, table);
    wrapper.appendChild(table);
  }

  // Dark and light theme
  document.documentElement.classList.remove('no-js');
  const STORAGE_KEY = 'user-color-scheme';
  const COLOR_MODE_KEY = '--color-mode';

  const modeToggleButton = document.querySelector('.js-mode-toggle');

  const getCSSCustomProp = propKey => {
    let response = getComputedStyle(document.documentElement).getPropertyValue(propKey);

    if (response.length) {
      response = response.replace(/\"/g, '').trim();
    }

    return response;
  };

  const applySetting = passedSetting => {
    let currentSetting = passedSetting || localStorage.getItem(STORAGE_KEY);

    if (currentSetting) {
      document.documentElement.setAttribute('data-user-color-scheme', currentSetting)
    }
  };

  const toggleSetting = () => {
    let currentSetting = localStorage.getItem(STORAGE_KEY);

    switch (currentSetting) {
      case null:
        currentSetting = getCSSCustomProp(COLOR_MODE_KEY) === 'dark' ? 'light' : 'dark';
        break;
      case 'light':
        currentSetting = 'dark';
        break;
      case 'dark':
        currentSetting = 'light';
        break;
    }

    localStorage.setItem(STORAGE_KEY, currentSetting);

    return currentSetting;
  };

  modeToggleButton.addEventListener('click', evt => {
    evt.preventDefault();

    applySetting(toggleSetting());
  });

  applySetting();




</script>
