changelog shortlog graph tags branches files raw help

Mercurial > infra > home / changeset: init vc

changeset 53: d25f982fb8a6
parent 0: 13e2311f6221
child 54: aa33e05d029d
author: Richard Westhaver <ellis@rwest.io>
date: Sat, 20 Jul 2024 22:31:54 -0400
files: .homerc .skelrc hgweb.conf hgweb.ini hgweb.py static/followlines.js static/hgicon.png static/hglogo.png static/mercurial.js static/style.css templates/atom/__init__.py templates/atom/bookmarkentry.tmpl templates/atom/bookmarks.tmpl templates/atom/branchentry.tmpl templates/atom/branches.tmpl templates/atom/changelog.tmpl templates/atom/changelogentry.tmpl templates/atom/error.tmpl templates/atom/filelog.tmpl templates/atom/header.tmpl templates/atom/map templates/atom/tagentry.tmpl templates/atom/tags.tmpl templates/coal/__init__.py templates/coal/header.tmpl templates/coal/map templates/gitweb/__init__.py templates/gitweb/bookmarks.tmpl templates/gitweb/branches.tmpl templates/gitweb/changelog.tmpl templates/gitweb/changelogentry.tmpl templates/gitweb/changeset.tmpl templates/gitweb/error.tmpl templates/gitweb/fileannotate.tmpl templates/gitweb/filecomparison.tmpl templates/gitweb/filediff.tmpl templates/gitweb/filelog.tmpl templates/gitweb/filerevision.tmpl templates/gitweb/footer.tmpl templates/gitweb/graph.tmpl templates/gitweb/graphentry.tmpl templates/gitweb/header.tmpl templates/gitweb/help.tmpl templates/gitweb/helptopics.tmpl templates/gitweb/index.tmpl templates/gitweb/manifest.tmpl templates/gitweb/map templates/gitweb/notfound.tmpl templates/gitweb/search.tmpl templates/gitweb/shortlog.tmpl templates/gitweb/summary.tmpl templates/gitweb/tags.tmpl templates/json/__init__.py templates/json/changelist.tmpl templates/json/graph.tmpl templates/json/map templates/map-cmdline.bisect templates/map-cmdline.changelog templates/map-cmdline.compact templates/map-cmdline.default templates/map-cmdline.phases templates/map-cmdline.show templates/map-cmdline.status templates/map-cmdline.xml templates/monoblue/__init__.py templates/monoblue/bookmarks.tmpl templates/monoblue/branches.tmpl templates/monoblue/changelog.tmpl templates/monoblue/changelogentry.tmpl templates/monoblue/changeset.tmpl templates/monoblue/error.tmpl templates/monoblue/fileannotate.tmpl templates/monoblue/filecomparison.tmpl templates/monoblue/filediff.tmpl templates/monoblue/filelog.tmpl templates/monoblue/filerevision.tmpl templates/monoblue/footer.tmpl templates/monoblue/graph.tmpl templates/monoblue/graphentry.tmpl templates/monoblue/header.tmpl templates/monoblue/help.tmpl templates/monoblue/helptopics.tmpl templates/monoblue/index.tmpl templates/monoblue/manifest.tmpl templates/monoblue/map templates/monoblue/notfound.tmpl templates/monoblue/search.tmpl templates/monoblue/shortlog.tmpl templates/monoblue/summary.tmpl templates/monoblue/tags.tmpl templates/paper/__init__.py templates/paper/bookmarks.tmpl templates/paper/branches.tmpl templates/paper/changeset.tmpl templates/paper/diffstat.tmpl templates/paper/error.tmpl templates/paper/fileannotate.tmpl templates/paper/filecomparison.tmpl templates/paper/filediff.tmpl templates/paper/filelog.tmpl templates/paper/filelogentry.tmpl templates/paper/filerevision.tmpl templates/paper/footer.tmpl templates/paper/graph.tmpl templates/paper/graphentry.tmpl templates/paper/header.tmpl templates/paper/help.tmpl templates/paper/helptopics.tmpl templates/paper/index.tmpl templates/paper/manifest.tmpl templates/paper/map templates/paper/notfound.tmpl templates/paper/search.tmpl templates/paper/shortlog.tmpl templates/paper/shortlogentry.tmpl templates/paper/tags.tmpl templates/raw/__init__.py templates/raw/changelog.tmpl templates/raw/changeset.tmpl templates/raw/error.tmpl templates/raw/fileannotate.tmpl templates/raw/filediff.tmpl templates/raw/graph.tmpl templates/raw/graphedge.tmpl templates/raw/graphnode.tmpl templates/raw/index.tmpl templates/raw/logentry.tmpl templates/raw/manifest.tmpl templates/raw/map templates/raw/notfound.tmpl templates/raw/search.tmpl templates/rss/__init__.py templates/rss/bookmarkentry.tmpl templates/rss/bookmarks.tmpl templates/rss/branchentry.tmpl templates/rss/branches.tmpl templates/rss/changelog.tmpl templates/rss/changelogentry.tmpl templates/rss/error.tmpl templates/rss/filelog.tmpl templates/rss/filelogentry.tmpl templates/rss/header.tmpl templates/rss/map templates/rss/tagentry.tmpl templates/rss/tags.tmpl templates/spartan/__init__.py templates/spartan/branches.tmpl templates/spartan/changelog.tmpl templates/spartan/changelogentry.tmpl templates/spartan/changeset.tmpl templates/spartan/error.tmpl templates/spartan/fileannotate.tmpl templates/spartan/filediff.tmpl templates/spartan/filelog.tmpl templates/spartan/filelogentry.tmpl templates/spartan/filerevision.tmpl templates/spartan/footer.tmpl templates/spartan/graph.tmpl templates/spartan/graphentry.tmpl templates/spartan/header.tmpl templates/spartan/index.tmpl templates/spartan/manifest.tmpl templates/spartan/map templates/spartan/notfound.tmpl templates/spartan/search.tmpl templates/spartan/shortlog.tmpl templates/spartan/shortlogentry.tmpl templates/spartan/tags.tmpl templates/static/__init__.py templates/static/background.png templates/static/coal-file.png templates/static/coal-folder.png templates/static/feed-icon-14x14.png templates/static/followlines.js templates/static/hgicon.png templates/static/hglogo.png templates/static/mercurial.js templates/static/style-extra-coal.css templates/static/style-gitweb.css templates/static/style-monoblue.css templates/static/style-paper.css templates/static/style.css
description: init vc
     1.1--- a/.homerc	Wed May 01 17:44:20 2024 -0400
     1.2+++ b/.homerc	Sat Jul 20 22:31:54 2024 -0400
     1.3@@ -0,0 +1,4 @@
     1.4+;;; -*- mode:skel; -*-
     1.5+:user vc
     1.6+:packy "~/.stash/packy"
     1.7+:shell :bash
     2.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2+++ b/.skelrc	Sat Jul 20 22:31:54 2024 -0400
     2.3@@ -0,0 +1,5 @@
     2.4+;;; .skelrc --- ellis@rurik  -*- mode: skel; -*-
     2.5+:user "vc"
     2.6+:vc :hg
     2.7+:log-level :trace
     2.8+:stash "~/.stash"
     3.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2+++ b/hgweb.conf	Sat Jul 20 22:31:54 2024 -0400
     3.3@@ -0,0 +1,27 @@
     3.4+[web]
     3.5+port = 8888
     3.6+encoding = UTF-8
     3.7+# allow_archive = zip
     3.8+baseurl = https://vc.compiler.company
     3.9+contact = ellis
    3.10+# templates = theme
    3.11+# style = monoblue
    3.12+templates = /home/vc/templates
    3.13+style = gitweb
    3.14+# pygments_style = tango
    3.15+highlightfiles = size('<100k')
    3.16+# highlightonlymatchfilename = True
    3.17+logourl = https://vc.compiler.company
    3.18+staticurl = /static
    3.19+descend = True
    3.20+collapse = False
    3.21+allow_push = ellis
    3.22+[extensions]
    3.23+highlight =
    3.24+[paths]
    3.25+/ = /home/vc/comp/**
    3.26+packy = /home/vc/packy
    3.27+scratch = /home/vc/scratch/**
    3.28+[phases]
    3.29+publish = False
    3.30+new-commit = draft
    3.31\ No newline at end of file
     4.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2+++ b/hgweb.ini	Sat Jul 20 22:31:54 2024 -0400
     4.3@@ -0,0 +1,17 @@
     4.4+[uwsgi]
     4.5+master = true
     4.6+# max-requests = 1000
     4.7+# logto = {log file path}/hgweb-uwsgi.log
     4.8+uid = vc # set process owner
     4.9+gid = vc
    4.10+stats = /run/vc/stats.sock
    4.11+chmod-socket = 666
    4.12+cap = setgid,setuid
    4.13+# https://www.mercurial-scm.org/wiki/PublishRepositoriesOnNginx
    4.14+plugins = python
    4.15+socket = /run/vc/hgweb.sock
    4.16+chdir = /home/vc/
    4.17+wsgi-file = hgweb.wsgi
    4.18+# https://stackoverflow.com/questions/15878176/uwsgi-invalid-request-block-size
    4.19+# http://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html
    4.20+# buffer-size = 65535
     5.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2+++ b/hgweb.py	Sat Jul 20 22:31:54 2024 -0400
     5.3@@ -0,0 +1,7 @@
     5.4+#!/usr/bin/env python3
     5.5+config = b"/home/vc/hgweb.conf"
     5.6+# enable demandloading to reduce startup time
     5.7+from mercurial import demandimport; demandimport.enable()
     5.8+from mercurial.hgweb import hgweb, wsgicgi
     5.9+app = hgweb(config)
    5.10+wsgicgi.launch(app)
     6.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2+++ b/static/followlines.js	Sat Jul 20 22:31:54 2024 -0400
     6.3@@ -0,0 +1,286 @@
     6.4+// followlines.js - JavaScript utilities for followlines UI
     6.5+//
     6.6+// Copyright 2017 Logilab SA <contact@logilab.fr>
     6.7+//
     6.8+// This software may be used and distributed according to the terms of the
     6.9+// GNU General Public License version 2 or any later version.
    6.10+
    6.11+//** Install event listeners for line block selection and followlines action */
    6.12+document.addEventListener('DOMContentLoaded', function() {
    6.13+    var sourcelines = document.getElementsByClassName('sourcelines')[0];
    6.14+    if (typeof sourcelines === 'undefined') {
    6.15+        return;
    6.16+    }
    6.17+    // URL to complement with "linerange" query parameter
    6.18+    var targetUri = sourcelines.dataset.logurl;
    6.19+    if (typeof targetUri === 'undefined') {
    6.20+        return;
    6.21+    }
    6.22+
    6.23+    // Tag of children of "sourcelines" element on which to add "line
    6.24+    // selection" style.
    6.25+    var selectableTag = sourcelines.dataset.selectabletag;
    6.26+    if (typeof selectableTag === 'undefined') {
    6.27+        return;
    6.28+    }
    6.29+
    6.30+    var isHead = parseInt(sourcelines.dataset.ishead || "0");
    6.31+
    6.32+    //* position "element" on top-right of cursor */
    6.33+    function positionTopRight(element, event) {
    6.34+        var x = (event.clientX + 10) + 'px',
    6.35+            y = (event.clientY - 20) + 'px';
    6.36+        element.style.top = y;
    6.37+        element.style.left = x;
    6.38+    }
    6.39+
    6.40+    // retrieve all direct *selectable* children of class="sourcelines"
    6.41+    // element
    6.42+    var selectableElements = Array.prototype.filter.call(
    6.43+        sourcelines.children,
    6.44+        function(x) { return x.tagName === selectableTag; });
    6.45+
    6.46+    var btnTitleStart = 'start following lines history from here';
    6.47+    var btnTitleEnd = 'terminate line block selection here';
    6.48+
    6.49+    //** return a <button> element with +/- spans */
    6.50+    function createButton() {
    6.51+        var btn = document.createElement('button');
    6.52+        btn.title = btnTitleStart;
    6.53+        btn.classList.add('btn-followlines');
    6.54+        var plusSpan = document.createElement('span');
    6.55+        plusSpan.classList.add('followlines-plus');
    6.56+        plusSpan.textContent = '+';
    6.57+        btn.appendChild(plusSpan);
    6.58+        var br = document.createElement('br');
    6.59+        btn.appendChild(br);
    6.60+        var minusSpan = document.createElement('span');
    6.61+        minusSpan.classList.add('followlines-minus');
    6.62+        minusSpan.textContent = '−';
    6.63+        btn.appendChild(minusSpan);
    6.64+        return btn;
    6.65+    }
    6.66+
    6.67+    // extend DOM with CSS class for selection highlight and action buttons
    6.68+    var followlinesButtons = [];
    6.69+    for (var i = 0; i < selectableElements.length; i++) {
    6.70+        selectableElements[i].classList.add('followlines-select');
    6.71+        var btn = createButton();
    6.72+        followlinesButtons.push(btn);
    6.73+        // insert the <button> as child of `selectableElements[i]` unless the
    6.74+        // latter has itself a child  with a "followlines-btn-parent" class
    6.75+        // (annotate view)
    6.76+        var btnSupportElm = selectableElements[i];
    6.77+        var childSupportElms = btnSupportElm.getElementsByClassName(
    6.78+            'followlines-btn-parent');
    6.79+        if ( childSupportElms.length > 0 ) {
    6.80+            btnSupportElm = childSupportElms[0];
    6.81+        }
    6.82+        var refNode = btnSupportElm.childNodes[0]; // node to insert <button> before
    6.83+        btnSupportElm.insertBefore(btn, refNode);
    6.84+    }
    6.85+
    6.86+    // ** re-initialize followlines buttons */
    6.87+    function resetButtons() {
    6.88+        for (var i = 0; i < followlinesButtons.length; i++) {
    6.89+            var btn = followlinesButtons[i];
    6.90+            btn.title = btnTitleStart;
    6.91+            btn.classList.remove('btn-followlines-end');
    6.92+            btn.classList.remove('btn-followlines-hidden');
    6.93+        }
    6.94+    }
    6.95+
    6.96+    var lineSelectedCSSClass = 'followlines-selected';
    6.97+
    6.98+    //** add CSS class on selectable elements in `from`-`to` line range */
    6.99+    function addSelectedCSSClass(from, to) {
   6.100+        for (var i = from; i <= to; i++) {
   6.101+            selectableElements[i].classList.add(lineSelectedCSSClass);
   6.102+        }
   6.103+    }
   6.104+
   6.105+    //** remove CSS class from previously selected lines */
   6.106+    function removeSelectedCSSClass() {
   6.107+        var elements = sourcelines.getElementsByClassName(
   6.108+            lineSelectedCSSClass);
   6.109+        while (elements.length) {
   6.110+            elements[0].classList.remove(lineSelectedCSSClass);
   6.111+        }
   6.112+    }
   6.113+
   6.114+    // ** return the element of type "selectableTag" parent of `element` */
   6.115+    function selectableParent(element) {
   6.116+        var parent = element.parentElement;
   6.117+        if (parent === null) {
   6.118+            return null;
   6.119+        }
   6.120+        if (element.tagName === selectableTag && parent.isSameNode(sourcelines)) {
   6.121+            return element;
   6.122+        }
   6.123+        return selectableParent(parent);
   6.124+    }
   6.125+
   6.126+    // ** update buttons title and style upon first click */
   6.127+    function updateButtons(selectable) {
   6.128+        for (var i = 0; i < followlinesButtons.length; i++) {
   6.129+            var btn = followlinesButtons[i];
   6.130+            btn.title = btnTitleEnd;
   6.131+            btn.classList.add('btn-followlines-end');
   6.132+        }
   6.133+        // on clicked button, change title to "cancel"
   6.134+        var clicked = selectable.getElementsByClassName('btn-followlines')[0];
   6.135+        clicked.title = 'cancel';
   6.136+        clicked.classList.remove('btn-followlines-end');
   6.137+    }
   6.138+
   6.139+    //** add `listener` on "click" event for all `followlinesButtons` */
   6.140+    function buttonsAddEventListener(listener) {
   6.141+        for (var i = 0; i < followlinesButtons.length; i++) {
   6.142+            followlinesButtons[i].addEventListener('click', listener);
   6.143+        }
   6.144+    }
   6.145+
   6.146+    //** remove `listener` on "click" event for all `followlinesButtons` */
   6.147+    function buttonsRemoveEventListener(listener) {
   6.148+        for (var i = 0; i < followlinesButtons.length; i++) {
   6.149+            followlinesButtons[i].removeEventListener('click', listener);
   6.150+        }
   6.151+    }
   6.152+
   6.153+    //** event handler for "click" on the first line of a block */
   6.154+    function lineSelectStart(e) {
   6.155+        var startElement = selectableParent(e.target.parentElement);
   6.156+        if (startElement === null) {
   6.157+            // not a "selectable" element (maybe <a>): abort, keeping event
   6.158+            // listener registered for other click with a "selectable" target
   6.159+            return;
   6.160+        }
   6.161+
   6.162+        // update button tooltip text and CSS
   6.163+        updateButtons(startElement);
   6.164+
   6.165+        var startId = parseInt(startElement.id.slice(1));
   6.166+        startElement.classList.add(lineSelectedCSSClass); // CSS
   6.167+
   6.168+        // remove this event listener
   6.169+        buttonsRemoveEventListener(lineSelectStart);
   6.170+
   6.171+        //** event handler for "click" on the last line of the block */
   6.172+        function lineSelectEnd(e) {
   6.173+            var endElement = selectableParent(e.target.parentElement);
   6.174+            if (endElement === null) {
   6.175+                // not a <span> (maybe <a>): abort, keeping event listener
   6.176+                // registered for other click with <span> target
   6.177+                return;
   6.178+            }
   6.179+
   6.180+            // remove this event listener
   6.181+            buttonsRemoveEventListener(lineSelectEnd);
   6.182+
   6.183+            // reset button tooltip text
   6.184+            resetButtons();
   6.185+
   6.186+            // compute line range (startId, endId)
   6.187+            var endId = parseInt(endElement.id.slice(1));
   6.188+            if (endId === startId) {
   6.189+                // clicked twice the same line, cancel and reset initial state
   6.190+                // (CSS, event listener for selection start)
   6.191+                removeSelectedCSSClass();
   6.192+                buttonsAddEventListener(lineSelectStart);
   6.193+                return;
   6.194+            }
   6.195+            var inviteElement = endElement;
   6.196+            if (endId < startId) {
   6.197+                var tmp = endId;
   6.198+                endId = startId;
   6.199+                startId = tmp;
   6.200+                inviteElement = startElement;
   6.201+            }
   6.202+
   6.203+            addSelectedCSSClass(startId - 1, endId -1);  // CSS
   6.204+
   6.205+            // append the <div id="followlines"> element to last line of the
   6.206+            // selection block
   6.207+            var divAndButton = followlinesBox(targetUri, startId, endId, isHead);
   6.208+            var div = divAndButton[0],
   6.209+                button = divAndButton[1];
   6.210+            inviteElement.appendChild(div);
   6.211+            // set position close to cursor (top-right)
   6.212+            positionTopRight(div, e);
   6.213+            // hide all buttons
   6.214+            for (var i = 0; i < followlinesButtons.length; i++) {
   6.215+                followlinesButtons[i].classList.add('btn-followlines-hidden');
   6.216+            }
   6.217+
   6.218+            //** event handler for cancelling selection */
   6.219+            function cancel() {
   6.220+                // remove invite box
   6.221+                div.parentNode.removeChild(div);
   6.222+                // restore initial event listeners
   6.223+                buttonsAddEventListener(lineSelectStart);
   6.224+                buttonsRemoveEventListener(cancel);
   6.225+                for (var i = 0; i < followlinesButtons.length; i++) {
   6.226+                    followlinesButtons[i].classList.remove('btn-followlines-hidden');
   6.227+                }
   6.228+                // remove styles on selected lines
   6.229+                removeSelectedCSSClass();
   6.230+                resetButtons();
   6.231+            }
   6.232+
   6.233+            // bind cancel event to click on <button>
   6.234+            button.addEventListener('click', cancel);
   6.235+            // as well as on an click on any source line
   6.236+            buttonsAddEventListener(cancel);
   6.237+        }
   6.238+
   6.239+        buttonsAddEventListener(lineSelectEnd);
   6.240+
   6.241+    }
   6.242+
   6.243+    buttonsAddEventListener(lineSelectStart);
   6.244+
   6.245+    //** return a <div id="followlines"> and inner cancel <button> elements */
   6.246+    function followlinesBox(targetUri, fromline, toline, isHead) {
   6.247+        // <div id="followlines">
   6.248+        var div = document.createElement('div');
   6.249+        div.id = 'followlines';
   6.250+
   6.251+        //   <div class="followlines-cancel">
   6.252+        var buttonDiv = document.createElement('div');
   6.253+        buttonDiv.classList.add('followlines-cancel');
   6.254+
   6.255+        //     <button>x</button>
   6.256+        var button = document.createElement('button');
   6.257+        button.textContent = 'x';
   6.258+        buttonDiv.appendChild(button);
   6.259+        div.appendChild(buttonDiv);
   6.260+
   6.261+        //   <div class="followlines-link">
   6.262+        var aDiv = document.createElement('div');
   6.263+        aDiv.classList.add('followlines-link');
   6.264+        aDiv.textContent = 'follow history of lines ' + fromline + ':' + toline + ':';
   6.265+        var linesep = document.createElement('br');
   6.266+        aDiv.appendChild(linesep);
   6.267+        //     link to "ascending" followlines
   6.268+        var aAsc = document.createElement('a');
   6.269+        var url = targetUri + '?patch=&linerange=' + fromline + ':' + toline;
   6.270+        aAsc.setAttribute('href', url);
   6.271+        aAsc.textContent = 'older';
   6.272+        aDiv.appendChild(aAsc);
   6.273+
   6.274+        if (!isHead) {
   6.275+            var sep = document.createTextNode(' / ');
   6.276+            aDiv.appendChild(sep);
   6.277+            //     link to "descending" followlines
   6.278+            var aDesc = document.createElement('a');
   6.279+            aDesc.setAttribute('href', url + '&descend=');
   6.280+            aDesc.textContent = 'newer';
   6.281+            aDiv.appendChild(aDesc);
   6.282+        }
   6.283+
   6.284+        div.appendChild(aDiv);
   6.285+
   6.286+        return [div, button];
   6.287+    }
   6.288+
   6.289+}, false);
     7.1Binary file static/hgicon.png has changed
     8.1Binary file static/hglogo.png has changed
     9.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2+++ b/static/mercurial.js	Sat Jul 20 22:31:54 2024 -0400
     9.3@@ -0,0 +1,580 @@
     9.4+// mercurial.js - JavaScript utility functions
     9.5+//
     9.6+// Rendering of branch DAGs on the client side
     9.7+// Display of elapsed time
     9.8+// Show or hide diffstat
     9.9+//
    9.10+// Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
    9.11+// Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
    9.12+//
    9.13+// derived from code written by Scott James Remnant <scott@ubuntu.com>
    9.14+// Copyright 2005 Canonical Ltd.
    9.15+//
    9.16+// This software may be used and distributed according to the terms
    9.17+// of the GNU General Public License, incorporated herein by reference.
    9.18+
    9.19+var colors = [
    9.20+	[ 1.0, 0.0, 0.0 ],
    9.21+	[ 1.0, 1.0, 0.0 ],
    9.22+	[ 0.0, 1.0, 0.0 ],
    9.23+	[ 0.0, 1.0, 1.0 ],
    9.24+	[ 0.0, 0.0, 1.0 ],
    9.25+	[ 1.0, 0.0, 1.0 ]
    9.26+];
    9.27+
    9.28+function Graph() {
    9.29+
    9.30+	this.canvas = document.getElementById('graph');
    9.31+	this.ctx = this.canvas.getContext('2d');
    9.32+	this.ctx.strokeStyle = 'rgb(0, 0, 0)';
    9.33+	this.ctx.fillStyle = 'rgb(0, 0, 0)';
    9.34+	this.bg = [0, 4];
    9.35+	this.cell = [2, 0];
    9.36+	this.columns = 0;
    9.37+
    9.38+}
    9.39+
    9.40+Graph.prototype = {
    9.41+	reset: function() {
    9.42+		this.bg = [0, 4];
    9.43+		this.cell = [2, 0];
    9.44+		this.columns = 0;
    9.45+	},
    9.46+
    9.47+	scale: function(height) {
    9.48+		this.bg_height = height;
    9.49+		this.box_size = Math.floor(this.bg_height / 1.2);
    9.50+		this.cell_height = this.box_size;
    9.51+	},
    9.52+
    9.53+	setColor: function(color, bg, fg) {
    9.54+
    9.55+		// Set the colour.
    9.56+		//
    9.57+		// If color is a string, expect an hexadecimal RGB
    9.58+		// value and apply it unchanged. If color is a number,
    9.59+		// pick a distinct colour based on an internal wheel;
    9.60+		// the bg parameter provides the value that should be
    9.61+		// assigned to the 'zero' colours and the fg parameter
    9.62+		// provides the multiplier that should be applied to
    9.63+		// the foreground colours.
    9.64+		var s;
    9.65+		if(typeof color === "string") {
    9.66+			s = "#" + color;
    9.67+		} else { //typeof color === "number"
    9.68+			color %= colors.length;
    9.69+			var red = (colors[color][0] * fg) || bg;
    9.70+			var green = (colors[color][1] * fg) || bg;
    9.71+			var blue = (colors[color][2] * fg) || bg;
    9.72+			red = Math.round(red * 255);
    9.73+			green = Math.round(green * 255);
    9.74+			blue = Math.round(blue * 255);
    9.75+			s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
    9.76+		}
    9.77+		this.ctx.strokeStyle = s;
    9.78+		this.ctx.fillStyle = s;
    9.79+		return s;
    9.80+
    9.81+	},
    9.82+
    9.83+	edge: function(x0, y0, x1, y1, color, width) {
    9.84+
    9.85+		this.setColor(color, 0.0, 0.65);
    9.86+		if(width >= 0)
    9.87+			 this.ctx.lineWidth = width;
    9.88+		this.ctx.beginPath();
    9.89+		this.ctx.moveTo(x0, y0);
    9.90+		this.ctx.lineTo(x1, y1);
    9.91+		this.ctx.stroke();
    9.92+
    9.93+	},
    9.94+
    9.95+	graphNodeCurrent: function(x, y, radius) {
    9.96+		this.ctx.lineWidth = 2;
    9.97+		this.ctx.beginPath();
    9.98+		this.ctx.arc(x, y, radius * 1.75, 0, Math.PI * 2, true);
    9.99+		this.ctx.stroke();
   9.100+	},
   9.101+
   9.102+	graphNodeClosing: function(x, y, radius) {
   9.103+		this.ctx.fillRect(x - radius, y - 1.5, radius * 2, 3);
   9.104+	},
   9.105+
   9.106+	graphNodeUnstable: function(x, y, radius) {
   9.107+		var x30 = radius * Math.cos(Math.PI / 6);
   9.108+		var y30 = radius * Math.sin(Math.PI / 6);
   9.109+		this.ctx.lineWidth = 2;
   9.110+		this.ctx.beginPath();
   9.111+		this.ctx.moveTo(x, y - radius);
   9.112+		this.ctx.lineTo(x, y + radius);
   9.113+		this.ctx.moveTo(x - x30, y - y30);
   9.114+		this.ctx.lineTo(x + x30, y + y30);
   9.115+		this.ctx.moveTo(x - x30, y + y30);
   9.116+		this.ctx.lineTo(x + x30, y - y30);
   9.117+		this.ctx.stroke();
   9.118+	},
   9.119+
   9.120+	graphNodeObsolete: function(x, y, radius) {
   9.121+		var p45 = radius * Math.cos(Math.PI / 4);
   9.122+		this.ctx.lineWidth = 3;
   9.123+		this.ctx.beginPath();
   9.124+		this.ctx.moveTo(x - p45, y - p45);
   9.125+		this.ctx.lineTo(x + p45, y + p45);
   9.126+		this.ctx.moveTo(x - p45, y + p45);
   9.127+		this.ctx.lineTo(x + p45, y - p45);
   9.128+		this.ctx.stroke();
   9.129+	},
   9.130+
   9.131+	graphNodeNormal: function(x, y, radius) {
   9.132+		this.ctx.beginPath();
   9.133+		this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
   9.134+		this.ctx.fill();
   9.135+	},
   9.136+
   9.137+	vertex: function(x, y, radius, color, parity, cur) {
   9.138+		this.ctx.save();
   9.139+		this.setColor(color, 0.25, 0.75);
   9.140+		if (cur.graphnode[0] === '@') {
   9.141+			this.graphNodeCurrent(x, y, radius);
   9.142+		}
   9.143+		switch (cur.graphnode.substr(-1)) {
   9.144+			case '_':
   9.145+				this.graphNodeClosing(x, y, radius);
   9.146+				break;
   9.147+			case '*':
   9.148+				this.graphNodeUnstable(x, y, radius);
   9.149+				break;
   9.150+			case 'x':
   9.151+				this.graphNodeObsolete(x, y, radius);
   9.152+				break;
   9.153+			default:
   9.154+				this.graphNodeNormal(x, y, radius);
   9.155+		}
   9.156+		this.ctx.restore();
   9.157+
   9.158+		var left = (this.bg_height - this.box_size) + (this.columns + 1) * this.box_size;
   9.159+		var item = document.querySelector('[data-node="' + cur.node + '"]');
   9.160+		if (item) {
   9.161+			item.style.paddingLeft = left + 'px';
   9.162+		}
   9.163+	},
   9.164+
   9.165+	render: function(data) {
   9.166+
   9.167+		var i, j, cur, line, start, end, color, x, y, x0, y0, x1, y1, column, radius;
   9.168+
   9.169+		var cols = 0;
   9.170+		for (i = 0; i < data.length; i++) {
   9.171+			cur = data[i];
   9.172+			for (j = 0; j < cur.edges.length; j++) {
   9.173+				line = cur.edges[j];
   9.174+				cols = Math.max(cols, line[0], line[1]);
   9.175+			}
   9.176+		}
   9.177+		this.canvas.width = (cols + 1) * this.bg_height;
   9.178+		this.canvas.height = (data.length + 1) * this.bg_height - 27;
   9.179+
   9.180+		for (i = 0; i < data.length; i++) {
   9.181+
   9.182+			var parity = i % 2;
   9.183+			this.cell[1] += this.bg_height;
   9.184+			this.bg[1] += this.bg_height;
   9.185+
   9.186+			cur = data[i];
   9.187+			var fold = false;
   9.188+
   9.189+			var prevWidth = this.ctx.lineWidth;
   9.190+			for (j = 0; j < cur.edges.length; j++) {
   9.191+
   9.192+				line = cur.edges[j];
   9.193+				start = line[0];
   9.194+				end = line[1];
   9.195+				color = line[2];
   9.196+				var width = line[3];
   9.197+				if(width < 0)
   9.198+					 width = prevWidth;
   9.199+				var branchcolor = line[4];
   9.200+				if(branchcolor)
   9.201+					color = branchcolor;
   9.202+
   9.203+				if (end > this.columns || start > this.columns) {
   9.204+					this.columns += 1;
   9.205+				}
   9.206+
   9.207+				if (start === this.columns && start > end) {
   9.208+					fold = true;
   9.209+				}
   9.210+
   9.211+				x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
   9.212+				y0 = this.bg[1] - this.bg_height / 2;
   9.213+				x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
   9.214+				y1 = this.bg[1] + this.bg_height / 2;
   9.215+
   9.216+				this.edge(x0, y0, x1, y1, color, width);
   9.217+
   9.218+			}
   9.219+			this.ctx.lineWidth = prevWidth;
   9.220+
   9.221+			// Draw the revision node in the right column
   9.222+
   9.223+			column = cur.vertex[0];
   9.224+			color = cur.vertex[1];
   9.225+
   9.226+			radius = this.box_size / 8;
   9.227+			x = this.cell[0] + this.box_size * column + this.box_size / 2;
   9.228+			y = this.bg[1] - this.bg_height / 2;
   9.229+			this.vertex(x, y, radius, color, parity, cur);
   9.230+
   9.231+			if (fold) this.columns -= 1;
   9.232+
   9.233+		}
   9.234+
   9.235+	}
   9.236+
   9.237+};
   9.238+
   9.239+
   9.240+function process_dates(parentSelector){
   9.241+
   9.242+	// derived from code from mercurial/templatefilter.py
   9.243+
   9.244+	var scales = {
   9.245+		'year':  365 * 24 * 60 * 60,
   9.246+		'month':  30 * 24 * 60 * 60,
   9.247+		'week':    7 * 24 * 60 * 60,
   9.248+		'day':    24 * 60 * 60,
   9.249+		'hour':   60 * 60,
   9.250+		'minute': 60,
   9.251+		'second': 1
   9.252+	};
   9.253+
   9.254+	function format(count, string){
   9.255+		var ret = count + ' ' + string;
   9.256+		if (count > 1){
   9.257+			ret = ret + 's';
   9.258+		}
   9.259+ 		return ret;
   9.260+ 	}
   9.261+
   9.262+	function shortdate(date){
   9.263+		var ret = date.getFullYear() + '-';
   9.264+		// getMonth() gives a 0-11 result
   9.265+		var month = date.getMonth() + 1;
   9.266+		if (month <= 9){
   9.267+			ret += '0' + month;
   9.268+		} else {
   9.269+			ret += month;
   9.270+		}
   9.271+		ret += '-';
   9.272+		var day = date.getDate();
   9.273+		if (day <= 9){
   9.274+			ret += '0' + day;
   9.275+		} else {
   9.276+			ret += day;
   9.277+		}
   9.278+		return ret;
   9.279+	}
   9.280+
   9.281+ 	function age(datestr){
   9.282+ 		var now = new Date();
   9.283+ 		var once = new Date(datestr);
   9.284+		if (isNaN(once.getTime())){
   9.285+			// parsing error
   9.286+			return datestr;
   9.287+		}
   9.288+
   9.289+		var delta = Math.floor((now.getTime() - once.getTime()) / 1000);
   9.290+
   9.291+		var future = false;
   9.292+		if (delta < 0){
   9.293+			future = true;
   9.294+			delta = -delta;
   9.295+			if (delta > (30 * scales.year)){
   9.296+				return "in the distant future";
   9.297+			}
   9.298+		}
   9.299+
   9.300+		if (delta > (2 * scales.year)){
   9.301+			return shortdate(once);
   9.302+		}
   9.303+
   9.304+		for (var unit in scales){
   9.305+			if (!scales.hasOwnProperty(unit)) { continue; }
   9.306+			var s = scales[unit];
   9.307+			var n = Math.floor(delta / s);
   9.308+			if ((n >= 2) || (s === 1)){
   9.309+				if (future){
   9.310+					return format(n, unit) + ' from now';
   9.311+				} else {
   9.312+					return format(n, unit) + ' ago';
   9.313+				}
   9.314+			}
   9.315+		}
   9.316+	}
   9.317+
   9.318+	var nodes = document.querySelectorAll((parentSelector || '') + ' .age');
   9.319+	var dateclass = new RegExp('\\bdate\\b');
   9.320+	for (var i=0; i<nodes.length; ++i){
   9.321+		var node = nodes[i];
   9.322+		var classes = node.className;
   9.323+		var agevalue = age(node.textContent);
   9.324+		if (dateclass.test(classes)){
   9.325+			// We want both: date + (age)
   9.326+			node.textContent += ' ('+agevalue+')';
   9.327+		} else {
   9.328+			node.title = node.textContent;
   9.329+			node.textContent = agevalue;
   9.330+		}
   9.331+	}
   9.332+}
   9.333+
   9.334+function toggleDiffstat(event) {
   9.335+    var curdetails = document.getElementById('diffstatdetails').style.display;
   9.336+    var curexpand = curdetails === 'none' ? 'inline' : 'none';
   9.337+    document.getElementById('diffstatdetails').style.display = curexpand;
   9.338+    document.getElementById('diffstatexpand').style.display = curdetails;
   9.339+    event.preventDefault();
   9.340+}
   9.341+
   9.342+function toggleLinewrap(event) {
   9.343+    function getLinewrap() {
   9.344+        var nodes = document.getElementsByClassName('sourcelines');
   9.345+        // if there are no such nodes, error is thrown here
   9.346+        return nodes[0].classList.contains('wrap');
   9.347+    }
   9.348+
   9.349+    function setLinewrap(enable) {
   9.350+        var nodes = document.getElementsByClassName('sourcelines');
   9.351+        var i;
   9.352+        for (i = 0; i < nodes.length; i++) {
   9.353+            if (enable) {
   9.354+                nodes[i].classList.add('wrap');
   9.355+            } else {
   9.356+                nodes[i].classList.remove('wrap');
   9.357+            }
   9.358+        }
   9.359+
   9.360+        var links = document.getElementsByClassName('linewraplink');
   9.361+        for (i = 0; i < links.length; i++) {
   9.362+            links[i].innerHTML = enable ? 'on' : 'off';
   9.363+        }
   9.364+    }
   9.365+
   9.366+    setLinewrap(!getLinewrap());
   9.367+    event.preventDefault();
   9.368+}
   9.369+
   9.370+function format(str, replacements) {
   9.371+    return str.replace(/%(\w+)%/g, function(match, p1) {
   9.372+        return String(replacements[p1]);
   9.373+    });
   9.374+}
   9.375+
   9.376+function makeRequest(url, method, onstart, onsuccess, onerror, oncomplete) {
   9.377+    var xhr = new XMLHttpRequest();
   9.378+    xhr.onreadystatechange = function() {
   9.379+        if (xhr.readyState === 4) {
   9.380+            try {
   9.381+                if (xhr.status === 200) {
   9.382+                    onsuccess(xhr.responseText);
   9.383+                } else {
   9.384+                    throw 'server error';
   9.385+                }
   9.386+            } catch (e) {
   9.387+                onerror(e);
   9.388+            } finally {
   9.389+                oncomplete();
   9.390+            }
   9.391+        }
   9.392+    };
   9.393+
   9.394+    xhr.open(method, url);
   9.395+    xhr.overrideMimeType("text/xhtml; charset=" + document.characterSet.toLowerCase());
   9.396+    xhr.send();
   9.397+    onstart();
   9.398+    return xhr;
   9.399+}
   9.400+
   9.401+function removeByClassName(className) {
   9.402+    var nodes = document.getElementsByClassName(className);
   9.403+    while (nodes.length) {
   9.404+        nodes[0].parentNode.removeChild(nodes[0]);
   9.405+    }
   9.406+}
   9.407+
   9.408+function docFromHTML(html) {
   9.409+    var doc = document.implementation.createHTMLDocument('');
   9.410+    doc.documentElement.innerHTML = html;
   9.411+    return doc;
   9.412+}
   9.413+
   9.414+function appendFormatHTML(element, formatStr, replacements) {
   9.415+    element.insertAdjacentHTML('beforeend', format(formatStr, replacements));
   9.416+}
   9.417+
   9.418+function adoptChildren(from, to) {
   9.419+    var nodes = from.children;
   9.420+    var curClass = 'c' + Date.now();
   9.421+    while (nodes.length) {
   9.422+        var node = nodes[0];
   9.423+        node = document.adoptNode(node);
   9.424+        node.classList.add(curClass);
   9.425+        to.appendChild(node);
   9.426+    }
   9.427+    process_dates('.' + curClass);
   9.428+}
   9.429+
   9.430+function ajaxScrollInit(urlFormat,
   9.431+                        nextPageVar,
   9.432+                        nextPageVarGet,
   9.433+                        containerSelector,
   9.434+                        messageFormat,
   9.435+                        mode) {
   9.436+    var updateInitiated = false;
   9.437+    var container = document.querySelector(containerSelector);
   9.438+
   9.439+    function scrollHandler() {
   9.440+        if (updateInitiated) {
   9.441+            return;
   9.442+        }
   9.443+
   9.444+        var scrollHeight = document.documentElement.scrollHeight;
   9.445+        var clientHeight = document.documentElement.clientHeight;
   9.446+        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
   9.447+
   9.448+        if (scrollHeight - (scrollTop + clientHeight) < 50) {
   9.449+            updateInitiated = true;
   9.450+            removeByClassName('scroll-loading-error');
   9.451+            container.lastElementChild.classList.add('scroll-separator');
   9.452+
   9.453+            if (!nextPageVar) {
   9.454+                var message = {
   9.455+                    'class': 'scroll-loading-info',
   9.456+                    text: 'No more entries'
   9.457+                };
   9.458+                appendFormatHTML(container, messageFormat, message);
   9.459+                return;
   9.460+            }
   9.461+
   9.462+            makeRequest(
   9.463+                format(urlFormat, {next: nextPageVar}),
   9.464+                'GET',
   9.465+                function onstart() {
   9.466+                    var message = {
   9.467+                        'class': 'scroll-loading',
   9.468+                        text: 'Loading...'
   9.469+                    };
   9.470+                    appendFormatHTML(container, messageFormat, message);
   9.471+                },
   9.472+                function onsuccess(htmlText) {
   9.473+                    var doc = docFromHTML(htmlText);
   9.474+
   9.475+                    if (mode === 'graph') {
   9.476+                        var graph = window.graph;
   9.477+                        var dataStr = htmlText.match(/^\s*var data = (.*);$/m)[1];
   9.478+                        var data = JSON.parse(dataStr);
   9.479+                        graph.reset();
   9.480+                        adoptChildren(doc.querySelector('#graphnodes'), container.querySelector('#graphnodes'));
   9.481+                        graph.render(data);
   9.482+                    } else {
   9.483+                        adoptChildren(doc.querySelector(containerSelector), container);
   9.484+                    }
   9.485+
   9.486+                    nextPageVar = nextPageVarGet(htmlText);
   9.487+                },
   9.488+                function onerror(errorText) {
   9.489+                    var message = {
   9.490+                        'class': 'scroll-loading-error',
   9.491+                        text: 'Error: ' + errorText
   9.492+                    };
   9.493+                    appendFormatHTML(container, messageFormat, message);
   9.494+                },
   9.495+                function oncomplete() {
   9.496+                    removeByClassName('scroll-loading');
   9.497+                    updateInitiated = false;
   9.498+                    scrollHandler();
   9.499+                }
   9.500+            );
   9.501+        }
   9.502+    }
   9.503+
   9.504+    window.addEventListener('scroll', scrollHandler);
   9.505+    window.addEventListener('resize', scrollHandler);
   9.506+    scrollHandler();
   9.507+}
   9.508+
   9.509+function renderDiffOptsForm() {
   9.510+    // We use URLSearchParams for query string manipulation. Old browsers don't
   9.511+    // support this API.
   9.512+    if (!("URLSearchParams" in window)) {
   9.513+        return;
   9.514+    }
   9.515+
   9.516+    var form = document.getElementById("diffopts-form");
   9.517+
   9.518+    var KEYS = [
   9.519+        "ignorews",
   9.520+        "ignorewsamount",
   9.521+        "ignorewseol",
   9.522+        "ignoreblanklines",
   9.523+    ];
   9.524+
   9.525+    var urlParams = new window.URLSearchParams(window.location.search);
   9.526+
   9.527+    function updateAndRefresh(e) {
   9.528+        var checkbox = e.target;
   9.529+        var name = checkbox.id.substr(0, checkbox.id.indexOf("-"));
   9.530+        urlParams.set(name, checkbox.checked ? "1" : "0");
   9.531+        window.location.search = urlParams.toString();
   9.532+    }
   9.533+
   9.534+    var allChecked = form.getAttribute("data-ignorews") === "1";
   9.535+
   9.536+    for (var i = 0; i < KEYS.length; i++) {
   9.537+        var key = KEYS[i];
   9.538+
   9.539+        var checkbox = document.getElementById(key + "-checkbox");
   9.540+        if (!checkbox) {
   9.541+            continue;
   9.542+        }
   9.543+
   9.544+        var currentValue = form.getAttribute("data-" + key);
   9.545+        checkbox.checked = currentValue !== "0";
   9.546+
   9.547+        // ignorews implies ignorewsamount and ignorewseol.
   9.548+        if (allChecked && (key === "ignorewsamount" || key === "ignorewseol")) {
   9.549+            checkbox.checked = true;
   9.550+            checkbox.disabled = true;
   9.551+        }
   9.552+
   9.553+        checkbox.addEventListener("change", updateAndRefresh, false);
   9.554+    }
   9.555+
   9.556+    form.style.display = 'block';
   9.557+}
   9.558+
   9.559+function addDiffStatToggle() {
   9.560+    var els = document.getElementsByClassName("diffstattoggle");
   9.561+
   9.562+    for (var i = 0; i < els.length; i++) {
   9.563+        els[i].addEventListener("click", toggleDiffstat, false);
   9.564+    }
   9.565+}
   9.566+
   9.567+function addLineWrapToggle() {
   9.568+    var els = document.getElementsByClassName("linewraptoggle");
   9.569+
   9.570+    for (var i = 0; i < els.length; i++) {
   9.571+        var nodes = els[i].getElementsByClassName("linewraplink");
   9.572+
   9.573+        for (var j = 0; j < nodes.length; j++) {
   9.574+            nodes[j].addEventListener("click", toggleLinewrap, false);
   9.575+        }
   9.576+    }
   9.577+}
   9.578+
   9.579+document.addEventListener('DOMContentLoaded', function() {
   9.580+   process_dates();
   9.581+   addDiffStatToggle();
   9.582+   addLineWrapToggle();
   9.583+}, false);
    10.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2+++ b/static/style.css	Sat Jul 20 22:31:54 2024 -0400
    10.3@@ -0,0 +1,128 @@
    10.4+body { background-color: #232220; color: antiquewhite; }
    10.5+h2 { font-family: mono; }
    10.6+
    10.7+a { text-decoration:none; color: #2B944B; font-weight: bold; }
    10.8+a:visited { color: chocolate; }
    10.9+a:hover { color: #E7600E; text-decoration:underline overline; }
   10.10+.age { white-space:nowrap; color: #87606C;}
   10.11+.date { white-space:nowrap; color: #232436; font-weight: bold;}
   10.12+.indexlinks { white-space:nowrap; }
   10.13+.parity0 { background-color: antiquewhite; color: #111111; font-family: mono; }
   10.14+.parity1 { background-color: antiquewhite; color: #111111; font-family: mono;}
   10.15+.lineno { width: 60px; color: black; font-size: x-small;
   10.16+          text-align: left;
   10.17+	  display: inline-table; }
   10.18+.author { color: #9470FF; }
   10.19+.plusline { color: green; }
   10.20+.minusline { color: red; }
   10.21+.atline { color: purple; }
   10.22+.annotate { font-size: smaller; text-align: right; padding-right: 1em; }
   10.23+tr.thisrev a { color:#999999; text-decoration: none; text-style: oblique; }
   10.24+tr.thisrev pre { color:#009900; }
   10.25+td.annotate {
   10.26+  white-space: nowrap;
   10.27+}
   10.28+div.annotate-info {
   10.29+  display: none;
   10.30+  position: absolute;
   10.31+  background-color: #FFFFFF;
   10.32+  border: 1px solid #888;
   10.33+  text-align: left;
   10.34+  color: #000000;
   10.35+  padding: 5px;
   10.36+}
   10.37+div.annotate-info a { color: #0000FF; }
   10.38+td.annotate:hover div.annotate-info { display: inline; }
   10.39+div.buttons { background-color: black; padding: 10px; }
   10.40+.buttons a {
   10.41+  background-color: #D64F53;
   10.42+  padding: 2pt;
   10.43+  color: wheat;
   10.44+  font-family: mono;
   10.45+  font-weight: bold;
   10.46+  
   10.47+}
   10.48+.navigate a {
   10.49+  background-color: #ccc;
   10.50+  padding: 2pt;
   10.51+  font-family: mono;
   10.52+  color: black;
   10.53+}
   10.54+
   10.55+.metatag {
   10.56+  background-color: #000000;
   10.57+  color: #FFFF;
   10.58+  text-align: right;
   10.59+  font-weight: bolder;
   10.60+}
   10.61+
   10.62+/* Common */
   10.63+pre { margin: 0; }
   10.64+
   10.65+.logo {
   10.66+  bottom:0;
   10.67+  right:0;
   10.68+  position:fixed;
   10.69+}
   10.70+
   10.71+/* Changelog/Filelog entries */
   10.72+.logEntry { width: 100%; }
   10.73+.logEntry .age { width: 15%; }
   10.74+.logEntry th.label { width: 16em; }
   10.75+.logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
   10.76+.logEntry th.age, .logEntry th.firstline { font-weight: bold; }
   10.77+.logEntry th.firstline { text-align: left; width: inherit; }
   10.78+
   10.79+/* Shortlog entries */
   10.80+.slogEntry { width: 100%; }
   10.81+.slogEntry .age { width: 8em; font-style: italic; }
   10.82+.slogEntry td { text-align: left; vertical-align: top; }
   10.83+.slogEntry td.author { width: 15em; font-weight: bold;}
   10.84+
   10.85+/* Tag entries */
   10.86+#tagEntries { list-style: none; margin: 0; padding: 0; }
   10.87+#tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
   10.88+
   10.89+/* Changeset entry */
   10.90+#changesetEntry { }
   10.91+#changesetEntry th { font-weight: normal; background-color: #382738; color: #E8CEBD; text-align: right; }
   10.92+#changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
   10.93+
   10.94+/* File diff view */
   10.95+#filediffEntry { }
   10.96+#filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
   10.97+
   10.98+/* Graph */
   10.99+div#wrapper {
  10.100+	position: relative;
  10.101+	margin: 0;
  10.102+	padding: 0;
  10.103+}
  10.104+
  10.105+canvas {
  10.106+	position: absolute;
  10.107+	z-index: 5;
  10.108+	top: -0.6em;
  10.109+	margin: 0;
  10.110+}
  10.111+
  10.112+ul#graphnodes {
  10.113+	list-style: none inside none;
  10.114+	padding: 0;
  10.115+	margin: 0;
  10.116+}
  10.117+
  10.118+ul#graphnodes li {
  10.119+	height: 37px;
  10.120+	overflow: visible;
  10.121+	padding-top: 2px;
  10.122+}
  10.123+
  10.124+ul#graphnodes li .fg {
  10.125+	position: absolute;
  10.126+	z-index: 10;
  10.127+}
  10.128+
  10.129+ul#graphnodes li .info {
  10.130+	font-size: 70%;
  10.131+}
    12.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2+++ b/templates/atom/bookmarkentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
    12.3@@ -0,0 +1,8 @@
    12.4+ <entry>
    12.5+  <title>{bookmark|escape}</title>
    12.6+  <link rel="alternate" href="{urlbase}{url|urlescape}rev/{node|short}"/>
    12.7+  <id>{urlbase}{url|urlescape}#bookmark-{node}</id>
    12.8+  <updated>{date|rfc3339date}</updated>
    12.9+  <published>{date|rfc3339date}</published>
   12.10+  <content type="text">{bookmark|strip|escape}</content>
   12.11+ </entry>
    13.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2+++ b/templates/atom/bookmarks.tmpl	Sat Jul 20 22:31:54 2024 -0400
    13.3@@ -0,0 +1,11 @@
    13.4+{header}
    13.5+ <id>{urlbase}{url|urlescape}</id>
    13.6+ <link rel="self" href="{urlbase}{url|urlescape}atom-bookmarks"/>
    13.7+ <link rel="alternate" href="{urlbase}{url|urlescape}bookmarks"/>
    13.8+ <title>{repo|escape}: bookmarks</title>
    13.9+ <summary>{repo|escape} bookmark history</summary>
   13.10+ <author><name>Mercurial SCM</name></author>
   13.11+ {lastchange%feedupdated}
   13.12+
   13.13+{entries%bookmarkentry}
   13.14+</feed>
    14.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2+++ b/templates/atom/branchentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
    14.3@@ -0,0 +1,8 @@
    14.4+ <entry>
    14.5+  <title>{branch|escape}</title>
    14.6+  <link rel="alternate" href="{urlbase}{url|urlescape}rev/{node|short}"/>
    14.7+  <id>{urlbase}{url|urlescape}#branch-{node}</id>
    14.8+  <updated>{date|rfc3339date}</updated>
    14.9+  <published>{date|rfc3339date}</published>
   14.10+  <content type="text">{branch|strip|escape}</content>
   14.11+ </entry>
    15.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2+++ b/templates/atom/branches.tmpl	Sat Jul 20 22:31:54 2024 -0400
    15.3@@ -0,0 +1,11 @@
    15.4+{header}
    15.5+ <id>{urlbase}{url|urlescape}</id>
    15.6+ <link rel="self" href="{urlbase}{url|urlescape}atom-branches"/>
    15.7+ <link rel="alternate" href="{urlbase}{url|urlescape}branches"/>
    15.8+ <title>{repo|escape}: branches</title>
    15.9+ <summary>{repo|escape} branch history</summary>
   15.10+ <author><name>Mercurial SCM</name></author>
   15.11+ {latestentry%feedupdated}
   15.12+
   15.13+ {entries%branchentry}
   15.14+</feed>
    16.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2+++ b/templates/atom/changelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
    16.3@@ -0,0 +1,10 @@
    16.4+{header}
    16.5+ <!-- Changelog -->
    16.6+ <id>{urlbase}{url|urlescape}</id>
    16.7+ <link rel="self" href="{urlbase}{url|urlescape}atom-log"/>
    16.8+ <link rel="alternate" href="{urlbase}{url|urlescape}"/>
    16.9+ <title>{repo|escape} Changelog</title>
   16.10+ {latestentry%feedupdated}
   16.11+
   16.12+{entries%changelogentry}
   16.13+</feed>
    17.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2+++ b/templates/atom/changelogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
    17.3@@ -0,0 +1,43 @@
    17.4+ <entry>
    17.5+  <title>{inbranch%"{if(name, '[{name|escape}] ')}"}{branches%"{if(name, '[{name|escape}] ')}"}{desc|strip|firstline|strip|escape|nonempty}</title>
    17.6+  <id>{urlbase}{url|urlescape}#changeset-{node}</id>
    17.7+  <link href="{urlbase}{url|urlescape}rev/{node|short}"/>
    17.8+  <author>
    17.9+   <name>{author|person|escape}</name>
   17.10+   <email>{author|email|obfuscate}</email>
   17.11+  </author>
   17.12+  <updated>{date|rfc3339date}</updated>
   17.13+  <published>{date|rfc3339date}</published>
   17.14+  <content type="xhtml">
   17.15+   <table xmlns="http://www.w3.org/1999/xhtml">
   17.16+    <tr>
   17.17+     <th style="text-align:left;">changeset</th>
   17.18+     <td>{node|short}</td>
   17.19+    </tr>
   17.20+    <tr>
   17.21+     <th style="text-align:left;">branch</th>
   17.22+     <td>{inbranch%"{name|escape}"}{branches%"{name|escape}"}</td>
   17.23+    </tr>
   17.24+    <tr>
   17.25+     <th style="text-align:left;">bookmark</th>
   17.26+     <td>{bookmarks%"{name|escape}"}</td>
   17.27+    </tr>
   17.28+    <tr>
   17.29+     <th style="text-align:left;">tag</th>
   17.30+     <td>{tags%"{name|escape}"}</td>
   17.31+    </tr>
   17.32+    <tr>
   17.33+     <th style="text-align:left;">user</th>
   17.34+     <td>{author|obfuscate}</td>
   17.35+    </tr>
   17.36+    <tr>
   17.37+     <th style="text-align:left;vertical-align:top;">description</th>
   17.38+     <td>{desc|strip|escape|websub|addbreaks|nonempty}</td>
   17.39+    </tr>
   17.40+    <tr>
   17.41+     <th style="text-align:left;vertical-align:top;">files</th>
   17.42+     <td>{files}</td>
   17.43+    </tr>
   17.44+   </table>
   17.45+  </content>
   17.46+ </entry>
    18.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2+++ b/templates/atom/error.tmpl	Sat Jul 20 22:31:54 2024 -0400
    18.3@@ -0,0 +1,17 @@
    18.4+{header}
    18.5+ <!-- Error -->
    18.6+ <id>{urlbase}{url|urlescape}</id>
    18.7+ <link rel="self" href="{urlbase}{url|urlescape}atom-log"/>
    18.8+ <link rel="alternate" href="{urlbase}{url|urlescape}"/>
    18.9+ <title>Error</title>
   18.10+ <updated>1970-01-01T00:00:00+00:00</updated>
   18.11+ <entry>
   18.12+  <title>Error</title>
   18.13+  <id>https://mercurial-scm.org/#error</id>
   18.14+  <author>
   18.15+    <name>mercurial</name>
   18.16+  </author>
   18.17+  <updated>1970-01-01T00:00:00+00:00</updated>
   18.18+  <content type="text">{error|escape}</content>
   18.19+ </entry>
   18.20+</feed>
    19.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2+++ b/templates/atom/filelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
    19.3@@ -0,0 +1,8 @@
    19.4+{header}
    19.5+ <id>{urlbase}{url|urlescape}atom-log/tip/{file|escape}</id>
    19.6+ <link rel="self" href="{urlbase}{url|urlescape}atom-log/tip/{file|urlescape}"/>
    19.7+ <title>{repo|escape}: {file|escape} history</title>
    19.8+ {latestentry%feedupdated}
    19.9+
   19.10+{entries%changelogentry}
   19.11+</feed>
    20.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2+++ b/templates/atom/header.tmpl	Sat Jul 20 22:31:54 2024 -0400
    20.3@@ -0,0 +1,2 @@
    20.4+<?xml version="1.0" encoding="{encoding}"?>
    20.5+<feed xmlns="http://www.w3.org/2005/Atom">
    20.6\ No newline at end of file
    21.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2+++ b/templates/atom/map	Sat Jul 20 22:31:54 2024 -0400
    21.3@@ -0,0 +1,18 @@
    21.4+default = 'changelog'
    21.5+feedupdated = '<updated>{date|rfc3339date}</updated>'
    21.6+mimetype = 'application/atom+xml; charset={encoding}'
    21.7+header = header.tmpl
    21.8+changelog = changelog.tmpl
    21.9+changelogentry = changelogentry.tmpl
   21.10+filelog = filelog.tmpl
   21.11+tags = tags.tmpl
   21.12+tagentry = tagentry.tmpl
   21.13+bookmarks = bookmarks.tmpl
   21.14+bookmarkentry = bookmarkentry.tmpl
   21.15+branches = branches.tmpl
   21.16+branchentry = branchentry.tmpl
   21.17+error = error.tmpl
   21.18+filedifflink = '{file|escape}<br />'
   21.19+fileellipses = '{file|escape}<br />'
   21.20+filenodelink = '{file|escape}<br />'
   21.21+filenolink = '{file|escape}<br />'
    22.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2+++ b/templates/atom/tagentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
    22.3@@ -0,0 +1,8 @@
    22.4+ <entry>
    22.5+  <title>{tag|escape}</title>
    22.6+  <link rel="alternate" href="{urlbase}{url|urlescape}rev/{node|short}"/>
    22.7+  <id>{urlbase}{url|urlescape}#tag-{node}</id>
    22.8+  <updated>{date|rfc3339date}</updated>
    22.9+  <published>{date|rfc3339date}</published>
   22.10+  <content type="text">{tag|strip|escape}</content>
   22.11+ </entry>
    23.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2+++ b/templates/atom/tags.tmpl	Sat Jul 20 22:31:54 2024 -0400
    23.3@@ -0,0 +1,11 @@
    23.4+{header}
    23.5+ <id>{urlbase}{url|urlescape}</id>
    23.6+ <link rel="self" href="{urlbase}{url|urlescape}atom-tags"/>
    23.7+ <link rel="alternate" href="{urlbase}{url|urlescape}tags"/>
    23.8+ <title>{repo|escape}: tags</title>
    23.9+ <summary>{repo|escape} tag history</summary>
   23.10+ <author><name>Mercurial SCM</name></author>
   23.11+ {latestentry%feedupdated}
   23.12+
   23.13+{entriesnotip%tagentry}
   23.14+</feed>
    25.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2+++ b/templates/coal/header.tmpl	Sat Jul 20 22:31:54 2024 -0400
    25.3@@ -0,0 +1,8 @@
    25.4+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    25.5+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
    25.6+<head>
    25.7+<link rel="icon" href="{staticurl|urlescape}hgicon.png" type="image/png" />
    25.8+<meta name="robots" content="index, nofollow" />
    25.9+<link rel="stylesheet" href="{staticurl|urlescape}style-paper.css" type="text/css" />
   25.10+<link rel="stylesheet" href="{staticurl|urlescape}style-extra-coal.css" type="text/css" />
   25.11+<script type="text/javascript" src="{staticurl|urlescape}mercurial.js"></script>
    26.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2+++ b/templates/coal/map	Sat Jul 20 22:31:54 2024 -0400
    26.3@@ -0,0 +1,2 @@
    26.4+__base__ = ../paper/map
    26.5+header = header.tmpl
    28.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2+++ b/templates/gitweb/bookmarks.tmpl	Sat Jul 20 22:31:54 2024 -0400
    28.3@@ -0,0 +1,35 @@
    28.4+{header}
    28.5+<title>{repo|escape}: Bookmarks</title>
    28.6+<link rel="alternate" type="application/atom+xml"
    28.7+   href="{url|urlescape}atom-bookmarks" title="Atom feed for {repo|escape}: bookmarks"/>
    28.8+<link rel="alternate" type="application/rss+xml"
    28.9+   href="{url|urlescape}rss-bookmarks" title="RSS feed for {repo|escape}: bookmarks"/>
   28.10+</head>
   28.11+<body>
   28.12+
   28.13+<div class="page_header">
   28.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   28.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / bookmarks
   28.16+</div>
   28.17+
   28.18+<div class="page_nav">
   28.19+<div>
   28.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   28.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   28.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   28.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   28.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   28.25+bookmarks |
   28.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   28.27+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a> |
   28.28+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   28.29+</div>
   28.30+{searchform}
   28.31+</div>
   28.32+
   28.33+<div class="title">&nbsp;</div>
   28.34+<table cellspacing="0">
   28.35+{entries%bookmarkentry}
   28.36+</table>
   28.37+
   28.38+{footer}
    29.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2+++ b/templates/gitweb/branches.tmpl	Sat Jul 20 22:31:54 2024 -0400
    29.3@@ -0,0 +1,35 @@
    29.4+{header}
    29.5+<title>{repo|escape}: Branches</title>
    29.6+<link rel="alternate" type="application/atom+xml"
    29.7+   href="{url|urlescape}atom-branches" title="Atom feed for {repo|escape}: branches"/>
    29.8+<link rel="alternate" type="application/rss+xml"
    29.9+   href="{url|urlescape}rss-branches" title="RSS feed for {repo|escape}: branches"/>
   29.10+</head>
   29.11+<body>
   29.12+
   29.13+<div class="page_header">
   29.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   29.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / branches
   29.16+</div>
   29.17+
   29.18+<div class="page_nav">
   29.19+<div>
   29.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   29.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   29.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   29.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   29.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   29.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   29.26+branches |
   29.27+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a> |
   29.28+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   29.29+</div>
   29.30+{searchform}
   29.31+</div>
   29.32+
   29.33+<div class="title">&nbsp;</div>
   29.34+<table cellspacing="0">
   29.35+{entries%branchentry}
   29.36+</table>
   29.37+
   29.38+{footer}
    30.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2+++ b/templates/gitweb/changelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
    30.3@@ -0,0 +1,38 @@
    30.4+{header}
    30.5+<title>{repo|escape}: Changelog</title>
    30.6+<link rel="alternate" type="application/atom+xml"
    30.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    30.8+<link rel="alternate" type="application/rss+xml"
    30.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   30.10+</head>
   30.11+<body>
   30.12+
   30.13+<div class="page_header">
   30.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   30.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / changelog
   30.16+</div>
   30.17+
   30.18+<div class="page_nav">
   30.19+<div>
   30.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   30.21+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a> |
   30.22+changelog |
   30.23+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a> |
   30.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   30.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   30.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   30.27+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
   30.28+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   30.29+<br/>
   30.30+{changenav%nav}<br/>
   30.31+</div>
   30.32+{searchform}
   30.33+</div>
   30.34+
   30.35+{entries%changelogentry}
   30.36+
   30.37+<div class="extra_nav">
   30.38+{changenav%nav}<br/>
   30.39+</div>
   30.40+
   30.41+{footer}
    31.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2+++ b/templates/gitweb/changelogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
    31.3@@ -0,0 +1,16 @@
    31.4+<div>
    31.5+ <a class="title" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
    31.6+  <span class="age">{date|rfc822date}</span>
    31.7+  {desc|strip|firstline|escape|nonempty}
    31.8+  {alltags}
    31.9+ </a>
   31.10+</div>
   31.11+<div class="title_text">
   31.12+<div class="log_link">
   31.13+<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
   31.14+</div>
   31.15+<i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
   31.16+</div>
   31.17+<div class="log_body description">{desc|strip|escape|websub|nonempty}
   31.18+
   31.19+</div>
    32.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2+++ b/templates/gitweb/changeset.tmpl	Sat Jul 20 22:31:54 2024 -0400
    32.3@@ -0,0 +1,62 @@
    32.4+{header}
    32.5+<title>{repo|escape}: changeset {rev}:{node|short}</title>
    32.6+<link rel="alternate" type="application/atom+xml"
    32.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    32.8+<link rel="alternate" type="application/rss+xml"
    32.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   32.10+</head>
   32.11+<body>
   32.12+
   32.13+<div class="page_header">
   32.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   32.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / changeset
   32.16+</div>
   32.17+
   32.18+<div class="page_nav">
   32.19+<div>
   32.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   32.21+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a> |
   32.22+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a> |
   32.23+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a> |
   32.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   32.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   32.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   32.27+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a> |
   32.28+changeset |
   32.29+<a href="{url|urlescape}raw-rev/{symrev}">raw</a> {archives%archiveentry} |
   32.30+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   32.31+</div>
   32.32+{searchform}
   32.33+</div>
   32.34+
   32.35+<div>
   32.36+ <a class="title" href="{url|urlescape}raw-rev/{node|short}">
   32.37+  {desc|strip|escape|firstline|nonempty}
   32.38+  {alltags}
   32.39+ </a>
   32.40+</div>
   32.41+<div class="title_text">
   32.42+<table cellspacing="0">
   32.43+<tr><td>author</td><td>{author|obfuscate}</td></tr>
   32.44+<tr><td></td><td class="date age">{date|rfc822date}</td></tr>
   32.45+{branch%changesetbranch}
   32.46+<tr>
   32.47+ <td>changeset {rev}</td>
   32.48+ <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
   32.49+</tr>
   32.50+{if(obsolete, succsandmarkers%obsfateentry)}
   32.51+{if(instabilities, whyunstable%whyunstableentry)}
   32.52+{ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}
   32.53+{child%changesetchild}
   32.54+</table></div>
   32.55+
   32.56+<div class="page_body description">{desc|strip|escape|websub|nonempty}</div>
   32.57+<div class="list_head"></div>
   32.58+<div class="title_text">
   32.59+<table cellspacing="0">
   32.60+{files}
   32.61+</table></div>
   32.62+
   32.63+<div class="page_body diffblocks">{diff}</div>
   32.64+
   32.65+{footer}
    33.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2+++ b/templates/gitweb/error.tmpl	Sat Jul 20 22:31:54 2024 -0400
    33.3@@ -0,0 +1,37 @@
    33.4+{header}
    33.5+<title>{repo|escape}: Error</title>
    33.6+<link rel="alternate" type="application/atom+xml"
    33.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    33.8+<link rel="alternate" type="application/rss+xml"
    33.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   33.10+</head>
   33.11+<body>
   33.12+
   33.13+<div class="page_header">
   33.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   33.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / error
   33.16+</div>
   33.17+
   33.18+<div class="page_nav">
   33.19+<div>
   33.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   33.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   33.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   33.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   33.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   33.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   33.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   33.27+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a> |
   33.28+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   33.29+</div>
   33.30+{searchform}
   33.31+</div>
   33.32+
   33.33+<div class="page_body">
   33.34+<br/>
   33.35+<i>An error occurred while processing your request</i><br/>
   33.36+<br/>
   33.37+{error|escape}
   33.38+</div>
   33.39+
   33.40+{footer}
    34.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2+++ b/templates/gitweb/fileannotate.tmpl	Sat Jul 20 22:31:54 2024 -0400
    34.3@@ -0,0 +1,85 @@
    34.4+{header}
    34.5+<title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
    34.6+<link rel="alternate" type="application/atom+xml"
    34.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    34.8+<link rel="alternate" type="application/rss+xml"
    34.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   34.10+</head>
   34.11+<body>
   34.12+
   34.13+<div class="page_header">
   34.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   34.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / annotate
   34.16+</div>
   34.17+
   34.18+<div class="page_nav">
   34.19+<div>
   34.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   34.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   34.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   34.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   34.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   34.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   34.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   34.27+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
   34.28+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
   34.29+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
   34.30+<a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
   34.31+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
   34.32+annotate |
   34.33+<a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
   34.34+<a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
   34.35+<a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a> |
   34.36+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   34.37+</div>
   34.38+{searchform}
   34.39+</div>
   34.40+
   34.41+<div class="title">{file|escape}</div>
   34.42+
   34.43+<div class="title_text">
   34.44+<table cellspacing="0">
   34.45+<tr>
   34.46+ <td>author</td>
   34.47+ <td>{author|obfuscate}</td>
   34.48+</tr>
   34.49+<tr>
   34.50+ <td></td>
   34.51+ <td class="date age">{date|rfc822date}</td>
   34.52+</tr>
   34.53+{branch%filerevbranch}
   34.54+<tr>
   34.55+ <td>changeset {rev}</td>
   34.56+ <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
   34.57+</tr>
   34.58+{parent%fileannotateparent}
   34.59+{child%fileannotatechild}
   34.60+<tr>
   34.61+ <td>permissions</td>
   34.62+ <td style="font-family:monospace">{permissions|permissions}</td>
   34.63+</tr>
   34.64+</table>
   34.65+</div>
   34.66+
   34.67+<div class="page_path description">{desc|strip|escape|websub|nonempty}</div>
   34.68+
   34.69+{diffoptsform}
   34.70+
   34.71+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
   34.72+    renderDiffOptsForm();
   34.73+</script>
   34.74+
   34.75+<div class="page_body">
   34.76+<table>
   34.77+<tbody class="sourcelines"
   34.78+       data-logurl="{url|urlescape}log/{symrev}/{file|urlescape}"
   34.79+       data-selectabletag="TR"
   34.80+       data-ishead="{ishead}">
   34.81+{annotate%annotateline}
   34.82+</tbody>
   34.83+</table>
   34.84+</div>
   34.85+
   34.86+<script type="text/javascript" src="{staticurl|urlescape}followlines.js"></script>
   34.87+
   34.88+{footer}
    35.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2+++ b/templates/gitweb/filecomparison.tmpl	Sat Jul 20 22:31:54 2024 -0400
    35.3@@ -0,0 +1,75 @@
    35.4+{header}
    35.5+<title>{repo|escape}: comparison {file|escape}</title>
    35.6+<link rel="alternate" type="application/atom+xml"
    35.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    35.8+<link rel="alternate" type="application/rss+xml"
    35.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   35.10+</head>
   35.11+<body>
   35.12+
   35.13+<div class="page_header">
   35.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   35.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / comparison
   35.16+</div>
   35.17+
   35.18+<div class="page_nav">
   35.19+<div>
   35.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   35.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   35.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   35.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   35.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   35.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   35.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   35.27+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
   35.28+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
   35.29+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
   35.30+<a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
   35.31+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
   35.32+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
   35.33+<a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
   35.34+comparison |
   35.35+<a href="{url|urlescape}raw-diff/{symrev}/{file|urlescape}">raw</a> |
   35.36+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   35.37+</div>
   35.38+{searchform}
   35.39+</div>
   35.40+
   35.41+<div class="title">{file|escape}</div>
   35.42+
   35.43+<table>
   35.44+{branch%filerevbranch}
   35.45+<tr>
   35.46+ <td>changeset {rev}</td>
   35.47+ <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
   35.48+</tr>
   35.49+{parent%filecompparent}
   35.50+{child%filecompchild}
   35.51+</table>
   35.52+
   35.53+<div class="list_head"></div>
   35.54+
   35.55+<div class="page_body">
   35.56+
   35.57+<div class="legend">
   35.58+  <span class="legendinfo equal">equal</span>
   35.59+  <span class="legendinfo delete">deleted</span>
   35.60+  <span class="legendinfo insert">inserted</span>
   35.61+  <span class="legendinfo replace">replaced</span>
   35.62+</div>
   35.63+
   35.64+<div class="comparison">
   35.65+  <table style="border-collapse:collapse;">
   35.66+    <thead class="header">
   35.67+      <tr>
   35.68+        <th>{leftrev}:{leftnode|short}</th>
   35.69+        <th>{rightrev}:{rightnode|short}</th>
   35.70+      </tr>
   35.71+    </thead>
   35.72+    {comparison}
   35.73+  </table>
   35.74+</div>
   35.75+
   35.76+</div>
   35.77+
   35.78+{footer}
    36.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2+++ b/templates/gitweb/filediff.tmpl	Sat Jul 20 22:31:54 2024 -0400
    36.3@@ -0,0 +1,56 @@
    36.4+{header}
    36.5+<title>{repo|escape}: diff {file|escape}</title>
    36.6+<link rel="alternate" type="application/atom+xml"
    36.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    36.8+<link rel="alternate" type="application/rss+xml"
    36.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   36.10+</head>
   36.11+<body>
   36.12+
   36.13+<div class="page_header">
   36.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   36.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / diff
   36.16+</div>
   36.17+
   36.18+<div class="page_nav">
   36.19+<div>
   36.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   36.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   36.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   36.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   36.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   36.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   36.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   36.27+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
   36.28+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
   36.29+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
   36.30+<a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
   36.31+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
   36.32+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
   36.33+diff |
   36.34+<a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
   36.35+<a href="{url|urlescape}raw-diff/{symrev}/{file|urlescape}">raw</a> |
   36.36+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   36.37+</div>
   36.38+{searchform}
   36.39+</div>
   36.40+
   36.41+<div class="title">{file|escape}</div>
   36.42+
   36.43+<table>
   36.44+{branch%filerevbranch}
   36.45+<tr>
   36.46+ <td>changeset {rev}</td>
   36.47+ <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
   36.48+</tr>
   36.49+{parent%filediffparent}
   36.50+{child%filediffchild}
   36.51+</table>
   36.52+
   36.53+<div class="list_head"></div>
   36.54+
   36.55+<div class="page_body">
   36.56+{diff}
   36.57+</div>
   36.58+
   36.59+{footer}
    37.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2+++ b/templates/gitweb/filelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
    37.3@@ -0,0 +1,52 @@
    37.4+{header}
    37.5+<title>{repo|escape}: File revisions</title>
    37.6+<link rel="alternate" type="application/atom+xml"
    37.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    37.8+<link rel="alternate" type="application/rss+xml"
    37.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   37.10+</head>
   37.11+<body>
   37.12+
   37.13+<div class="page_header">
   37.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   37.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / file revisions
   37.16+</div>
   37.17+
   37.18+<div class="page_nav">
   37.19+<div>
   37.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   37.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   37.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   37.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   37.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   37.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   37.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   37.27+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
   37.28+revisions |
   37.29+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
   37.30+<a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
   37.31+<a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
   37.32+<a href="{url|urlescape}rss-log/tip/{file|urlescape}">rss</a> |
   37.33+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   37.34+<br/>
   37.35+{nav%filenav}
   37.36+</div>
   37.37+{searchform}
   37.38+</div>
   37.39+
   37.40+<div class="title" >
   37.41+  {file|urlescape}{if(linerange,
   37.42+' (following lines {linerange}{if(descend, ', descending')} <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">all revisions for this file</a>)')}
   37.43+</div>
   37.44+
   37.45+<table>
   37.46+{entries%filelogentry}
   37.47+</table>
   37.48+
   37.49+<div class="extra_nav">
   37.50+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{lessvars%urlparameter}">less</a>
   37.51+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{morevars%urlparameter}">more</a>
   37.52+{nav%filenav}
   37.53+</div>
   37.54+
   37.55+{footer}
    38.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2+++ b/templates/gitweb/filerevision.tmpl	Sat Jul 20 22:31:54 2024 -0400
    38.3@@ -0,0 +1,77 @@
    38.4+{header}
    38.5+<title>{repo|escape}: {file|escape}@{node|short}</title>
    38.6+<link rel="alternate" type="application/atom+xml"
    38.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    38.8+<link rel="alternate" type="application/rss+xml"
    38.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   38.10+</head>
   38.11+<body>
   38.12+
   38.13+<div class="page_header">
   38.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   38.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / file revision
   38.16+</div>
   38.17+
   38.18+<div class="page_nav">
   38.19+<div>
   38.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   38.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   38.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   38.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   38.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   38.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   38.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   38.27+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a> |
   38.28+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> |
   38.29+file |
   38.30+<a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
   38.31+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
   38.32+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
   38.33+<a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
   38.34+<a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
   38.35+<a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a> |
   38.36+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   38.37+</div>
   38.38+{searchform}
   38.39+</div>
   38.40+
   38.41+<div class="title">{file|escape}</div>
   38.42+
   38.43+<div class="title_text">
   38.44+<table cellspacing="0">
   38.45+<tr>
   38.46+ <td>author</td>
   38.47+ <td>{author|obfuscate}</td>
   38.48+</tr>
   38.49+<tr>
   38.50+ <td></td>
   38.51+ <td class="date age">{date|rfc822date}</td>
   38.52+</tr>
   38.53+{branch%filerevbranch}
   38.54+<tr>
   38.55+ <td>changeset {rev}</td>
   38.56+ <td style="font-family:monospace"><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
   38.57+</tr>
   38.58+{parent%filerevparent}
   38.59+{child%filerevchild}
   38.60+<tr>
   38.61+ <td>permissions</td>
   38.62+ <td style="font-family:monospace">{permissions|permissions}</td>
   38.63+</tr>
   38.64+</table>
   38.65+</div>
   38.66+
   38.67+<div class="page_path description">{desc|strip|escape|websub|nonempty}</div>
   38.68+
   38.69+<div class="page_body">
   38.70+<pre class="sourcelines stripes"
   38.71+     data-logurl="{url|urlescape}log/{symrev}/{file|urlescape}"
   38.72+     data-selectabletag="SPAN"
   38.73+     data-ishead="{ishead}">
   38.74+{text%fileline}
   38.75+</pre>
   38.76+</div>
   38.77+
   38.78+<script type="text/javascript" src="{staticurl|urlescape}followlines.js"></script>
   38.79+
   38.80+{footer}
    39.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2+++ b/templates/gitweb/footer.tmpl	Sat Jul 20 22:31:54 2024 -0400
    39.3@@ -0,0 +1,11 @@
    39.4+<div class="page_footer">
    39.5+<div class="page_footer_text">{repo|escape}</div>
    39.6+<div class="rss_logo">
    39.7+<a href="{url|urlescape}rss-log">RSS</a>
    39.8+<a href="{url|urlescape}atom-log">Atom</a>
    39.9+</div>
   39.10+<br />
   39.11+{motd}
   39.12+</div>
   39.13+</body>
   39.14+</html>
    40.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2+++ b/templates/gitweb/graph.tmpl	Sat Jul 20 22:31:54 2024 -0400
    40.3@@ -0,0 +1,70 @@
    40.4+{header}
    40.5+<title>{repo|escape}: Graph</title>
    40.6+<link rel="alternate" type="application/atom+xml"
    40.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    40.8+<link rel="alternate" type="application/rss+xml"
    40.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   40.10+</head>
   40.11+<body>
   40.12+
   40.13+<div class="page_header">
   40.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   40.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / graph
   40.16+</div>
   40.17+
   40.18+<div class="page_nav">
   40.19+<div>
   40.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   40.21+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a> |
   40.22+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a> |
   40.23+graph |
   40.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   40.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   40.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   40.27+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
   40.28+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   40.29+<br/>
   40.30+<a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
   40.31+<a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
   40.32+| {changenav%navgraph}
   40.33+</div>
   40.34+{searchform}
   40.35+</div>
   40.36+
   40.37+<div class="title">&nbsp;</div>
   40.38+
   40.39+<noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
   40.40+
   40.41+<div id="wrapper">
   40.42+<canvas id="graph"></canvas>
   40.43+<ul id="graphnodes">{nodes%graphentry}</ul>
   40.44+</div>
   40.45+
   40.46+<script{if(nonce, ' nonce="{nonce}"')}>
   40.47+var data = {jsdata|json};
   40.48+var graph = new Graph();
   40.49+graph.scale({bg_height});
   40.50+graph.render(data);
   40.51+</script>
   40.52+
   40.53+<div class="extra_nav">
   40.54+<a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
   40.55+<a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
   40.56+| {changenav%navgraph}
   40.57+</div>
   40.58+
   40.59+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
   40.60+    ajaxScrollInit(
   40.61+            '{url|urlescape}graph/%next%{graphvars%urlparameter}',
   40.62+            '{nextentry%"{node}"}', <!-- NEXTHASH
   40.63+            function (htmlText) \{
   40.64+                var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
   40.65+                return m ? m[1] : null;
   40.66+            },
   40.67+            '#wrapper',
   40.68+            '<div class="%class%" style="text-align: center;">%text%</div>',
   40.69+            'graph'
   40.70+    );
   40.71+</script>
   40.72+
   40.73+{footer}
    41.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2+++ b/templates/gitweb/graphentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
    41.3@@ -0,0 +1,9 @@
    41.4+<li class="parity{parity}" data-node="{node|short}">
    41.5+ <div class="fg">
    41.6+  <span class="desc">
    41.7+   <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}"><b>{desc|strip|firstline|escape|nonempty}</b></a>
    41.8+  </span>
    41.9+  {alltags}
   41.10+  <div class="info">{date|age}, by {author|person}</div>
   41.11+ </div>
   41.12+</li>
    42.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2+++ b/templates/gitweb/header.tmpl	Sat Jul 20 22:31:54 2024 -0400
    42.3@@ -0,0 +1,8 @@
    42.4+<?xml version="1.0" encoding="{encoding}"?>
    42.5+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    42.6+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
    42.7+<head>
    42.8+<link rel="icon" href="{staticurl|urlescape}hgicon.png" type="image/png" />
    42.9+<meta name="robots" content="index, nofollow"/>
   42.10+<link rel="stylesheet" href="{staticurl|urlescape}style-gitweb.css" type="text/css" />
   42.11+<script type="text/javascript" src="{staticurl|urlescape}mercurial.js"></script>
    43.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2+++ b/templates/gitweb/help.tmpl	Sat Jul 20 22:31:54 2024 -0400
    43.3@@ -0,0 +1,36 @@
    43.4+{header}
    43.5+<title>Help: {topic}</title>
    43.6+<link rel="alternate" type="application/atom+xml"
    43.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    43.8+<link rel="alternate" type="application/rss+xml"
    43.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   43.10+</head>
   43.11+<body>
   43.12+
   43.13+<div class="page_header">
   43.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   43.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / help
   43.16+</div>
   43.17+
   43.18+<div class="page_nav">
   43.19+<div>
   43.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   43.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   43.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   43.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   43.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   43.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   43.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   43.27+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a> |
   43.28+help
   43.29+</div>
   43.30+{searchform}
   43.31+</div>
   43.32+
   43.33+<div class="title">&nbsp;</div>
   43.34+
   43.35+<div id="doc">
   43.36+{rstdoc(doc, "html")}
   43.37+</div>
   43.38+
   43.39+{footer}
    44.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.2+++ b/templates/gitweb/helptopics.tmpl	Sat Jul 20 22:31:54 2024 -0400
    44.3@@ -0,0 +1,50 @@
    44.4+{header}
    44.5+<title>Help: {title}</title>
    44.6+<link rel="alternate" type="application/atom+xml"
    44.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    44.8+<link rel="alternate" type="application/rss+xml"
    44.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   44.10+</head>
   44.11+<body>
   44.12+
   44.13+<div class="page_header">
   44.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   44.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / help
   44.16+</div>
   44.17+
   44.18+<div class="page_nav">
   44.19+<div>
   44.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   44.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   44.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   44.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   44.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   44.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   44.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   44.27+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a> |
   44.28+{if(subindex,
   44.29+  '<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>',
   44.30+  'help'
   44.31+)}
   44.32+</div>
   44.33+{searchform}
   44.34+</div>
   44.35+
   44.36+<div class="title">&nbsp;</div>
   44.37+<table cellspacing="0">
   44.38+<tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
   44.39+{topics % helpentry}
   44.40+
   44.41+{if(earlycommands, '
   44.42+<tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
   44.43+{earlycommands % helpentry}
   44.44+')}
   44.45+
   44.46+{if(othercommands, '
   44.47+<tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
   44.48+{othercommands % helpentry}
   44.49+')}
   44.50+
   44.51+</table>
   44.52+
   44.53+{footer}
    45.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.2+++ b/templates/gitweb/index.tmpl	Sat Jul 20 22:31:54 2024 -0400
    45.3@@ -0,0 +1,26 @@
    45.4+{header}
    45.5+<title>Mercurial repositories index</title>
    45.6+</head>
    45.7+<body>
    45.8+
    45.9+<div class="page_header">
   45.10+    <a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   45.11+    <a href="/">Mercurial</a> {pathdef%breadcrumb}
   45.12+</div>
   45.13+
   45.14+<table cellspacing="0">
   45.15+    <tr>
   45.16+        <td><a href="?sort={sort_name}">Name</a></td>
   45.17+        <td><a href="?sort={sort_description}">Description</a></td>
   45.18+        <td><a href="?sort={sort_contact}">Contact</a></td>
   45.19+        <td><a href="?sort={sort_lastchange}">Last modified</a></td>
   45.20+        <td>&nbsp;</td>
   45.21+        <td>&nbsp;</td>
   45.22+    </tr>
   45.23+    {entries%indexentry}
   45.24+</table>
   45.25+<div class="page_footer">
   45.26+{motd}
   45.27+</div>
   45.28+</body>
   45.29+</html>
    46.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2+++ b/templates/gitweb/manifest.tmpl	Sat Jul 20 22:31:54 2024 -0400
    46.3@@ -0,0 +1,38 @@
    46.4+{header}
    46.5+<title>{repo|escape}: files</title>
    46.6+<link rel="alternate" type="application/atom+xml"
    46.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    46.8+<link rel="alternate" type="application/rss+xml"
    46.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   46.10+</head>
   46.11+<body>
   46.12+
   46.13+<div class="page_header">
   46.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   46.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / files
   46.16+</div>
   46.17+
   46.18+<div class="page_nav">
   46.19+<div>
   46.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   46.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   46.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   46.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   46.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   46.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   46.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   46.27+files |
   46.28+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry} |
   46.29+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   46.30+</div>
   46.31+{searchform}
   46.32+</div>
   46.33+
   46.34+<div class="title">{path|escape} {alltags}</div>
   46.35+<table cellspacing="0">
   46.36+{ifeq(path, up, '', updirentry)}
   46.37+{dentries%direntry}
   46.38+{fentries%fileentry}
   46.39+</table>
   46.40+
   46.41+{footer}
    47.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.2+++ b/templates/gitweb/map	Sat Jul 20 22:31:54 2024 -0400
    47.3@@ -0,0 +1,383 @@
    47.4+default = 'summary'
    47.5+mimetype = 'text/html; charset={encoding}'
    47.6+header = header.tmpl
    47.7+footer = footer.tmpl
    47.8+search = search.tmpl
    47.9+changelog = changelog.tmpl
   47.10+summary = summary.tmpl
   47.11+error = error.tmpl
   47.12+notfound = notfound.tmpl
   47.13+
   47.14+help = help.tmpl
   47.15+helptopics = helptopics.tmpl
   47.16+
   47.17+helpentry = '
   47.18+  <tr><td>
   47.19+    <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
   47.20+      {if(basename, '{basename|escape}', '{topic|escape}')}
   47.21+    </a>
   47.22+  </td><td>
   47.23+    {summary|escape}
   47.24+  </td></tr>'
   47.25+
   47.26+naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
   47.27+navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
   47.28+navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
   47.29+filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
   47.30+filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
   47.31+filenodelink = '
   47.32+  <tr class="parity{parity}">
   47.33+    <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
   47.34+    <td></td>
   47.35+    <td class="link">
   47.36+      <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
   47.37+      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
   47.38+      <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
   47.39+      <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
   47.40+      <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
   47.41+    </td>
   47.42+  </tr>'
   47.43+filenolink = '
   47.44+  <tr class="parity{parity}">
   47.45+    <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
   47.46+    <td></td>
   47.47+    <td class="link">
   47.48+      file |
   47.49+      annotate |
   47.50+      <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
   47.51+      <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
   47.52+      <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
   47.53+    </td>
   47.54+  </tr>'
   47.55+
   47.56+nav = '{before%naventry} {after%naventry}'
   47.57+navshort = '{before%navshortentry}{after%navshortentry}'
   47.58+navgraph = '{before%navgraphentry}{after%navgraphentry}'
   47.59+filenav = '{before%filenaventry}{after%filenaventry}'
   47.60+
   47.61+fileellipses = '...'
   47.62+changelogentry = changelogentry.tmpl
   47.63+changeset = changeset.tmpl
   47.64+manifest = manifest.tmpl
   47.65+updirentry = '
   47.66+  <tr class="parity{upparity}">
   47.67+    <td style="font-family:monospace">drwxr-xr-x</td>
   47.68+    <td style="font-family:monospace"></td>
   47.69+    <td style="font-family:monospace"></td>
   47.70+    <td>
   47.71+      <a href="{url|urlescape}file/{symrev}{up|urlescape}{sessionvars%urlparameter}">[up]</a>
   47.72+    </td>
   47.73+    <td class="link">&nbsp;</td>
   47.74+  </tr>'
   47.75+direntry = '
   47.76+  <tr class="parity{parity}">
   47.77+    <td style="font-family:monospace">drwxr-xr-x</td>
   47.78+    <td style="font-family:monospace"></td>
   47.79+    <td style="font-family:monospace"></td>
   47.80+    <td>
   47.81+      <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
   47.82+      <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
   47.83+    </td>
   47.84+    <td class="link">
   47.85+      <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a>
   47.86+    </td>
   47.87+  </tr>'
   47.88+fileentry = '
   47.89+  <tr class="parity{parity}">
   47.90+    <td style="font-family:monospace">{permissions|permissions}</td>
   47.91+    <td style="font-family:monospace" align=right>{date|isodate}</td>
   47.92+    <td style="font-family:monospace" align=right>{size}</td>
   47.93+    <td class="list">
   47.94+      <a class="list" href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
   47.95+    </td>
   47.96+    <td class="link">
   47.97+      <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
   47.98+      <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
   47.99+      <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
  47.100+    </td>
  47.101+  </tr>'
  47.102+filerevision = filerevision.tmpl
  47.103+fileannotate = fileannotate.tmpl
  47.104+filediff = filediff.tmpl
  47.105+filecomparison = filecomparison.tmpl
  47.106+filelog = filelog.tmpl
  47.107+fileline = '
  47.108+  <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
  47.109+annotateline = '
  47.110+  <tr id="{lineid}" style="font-family:monospace" class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
  47.111+    <td class="annotate linenr parity{blockparity}" style="text-align: right;">
  47.112+      {if(blockhead,
  47.113+          '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
  47.114+             {rev}
  47.115+           </a>')}
  47.116+      <div class="annotate-info">
  47.117+        <div>
  47.118+          <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
  47.119+            {node|short}</a>
  47.120+          {desc|escape|firstline}
  47.121+        </div>
  47.122+        <div><em>{author|obfuscate}</em></div>
  47.123+        <div>parents: {parents%annotateparent}</div>
  47.124+        <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
  47.125+        <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
  47.126+      </div>
  47.127+    </td>
  47.128+    <td class="followlines-btn-parent"><pre><a class="linenr" href="#{lineid}">{linenumber}</a></pre></td>
  47.129+    <td><pre>{line|escape}</pre></td>
  47.130+  </tr>'
  47.131+annotateparent = '
  47.132+  <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
  47.133+difflineplus = '
  47.134+  <a href="#{lineid}"></a><span id="{lineid}" class="difflineplus">{strip(line|escape, '\r\n')}</span>'
  47.135+difflineminus = '
  47.136+  <a href="#{lineid}"></a><span id="{lineid}" class="difflineminus">{strip(line|escape, '\r\n')}</span>'
  47.137+difflineat = '
  47.138+  <a href="#{lineid}"></a><span id="{lineid}" class="difflineat">{strip(line|escape, '\r\n')}</span>'
  47.139+diffline = '
  47.140+  <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
  47.141+
  47.142+comparisonblock ='
  47.143+  <tbody class="block">
  47.144+  {lines}
  47.145+  </tbody>'
  47.146+comparisonline = '
  47.147+  <tr id="{lineid}" style="font-family:monospace">
  47.148+    <td class="{type}"><pre><a class="linenr" href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</pre></td>
  47.149+    <td class="{type}"><pre><a class="linenr" href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</pre></td>
  47.150+  </tr>'
  47.151+
  47.152+changesetlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
  47.153+changesetbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
  47.154+changesetparent = '
  47.155+  <tr>
  47.156+    <td>parent {rev}</td>
  47.157+    <td style="font-family:monospace">
  47.158+      {changesetlink}
  47.159+    </td>
  47.160+  </tr>'
  47.161+changesetparentdiff = '
  47.162+  <tr>
  47.163+    <td>parent {rev}</td>
  47.164+    <td style="font-family:monospace">
  47.165+      {changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}
  47.166+    </td>
  47.167+  </tr>'
  47.168+difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
  47.169+filerevbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
  47.170+filerevparent = '
  47.171+  <tr>
  47.172+    <td>parent {rev}</td>
  47.173+    <td style="font-family:monospace">
  47.174+      <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
  47.175+        {rename%filerename}{node|short}
  47.176+      </a>
  47.177+    </td>
  47.178+  </tr>'
  47.179+filerename = '{file|escape}@'
  47.180+filelogrename = '| <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
  47.181+fileannotateparent = '
  47.182+  <tr>
  47.183+    <td>parent {rev}</td>
  47.184+    <td style="font-family:monospace">
  47.185+      <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
  47.186+        {rename%filerename}{node|short}
  47.187+      </a>
  47.188+    </td>
  47.189+  </tr>'
  47.190+changesetchild = '
  47.191+  <tr>
  47.192+    <td>child {rev}</td>
  47.193+    <td style="font-family:monospace">
  47.194+      <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
  47.195+    </td>
  47.196+  </tr>'
  47.197+filerevchild = '
  47.198+  <tr>
  47.199+    <td>child {rev}</td>
  47.200+    <td style="font-family:monospace">
  47.201+      <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
  47.202+    </tr>'
  47.203+fileannotatechild = '
  47.204+  <tr>
  47.205+    <td>child {rev}</td>
  47.206+    <td style="font-family:monospace">
  47.207+      <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
  47.208+    </tr>'
  47.209+tags = tags.tmpl
  47.210+tagentry = '
  47.211+  <tr class="parity{parity}">
  47.212+    <td class="age"><i class="age">{date|rfc822date}</i></td>
  47.213+    <td><a class="list" href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
  47.214+    <td class="link">
  47.215+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
  47.216+      <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
  47.217+      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
  47.218+    </td>
  47.219+  </tr>'
  47.220+bookmarks = bookmarks.tmpl
  47.221+bookmarkentry = '
  47.222+  <tr class="parity{parity}">
  47.223+    <td class="age"><i class="age">{date|rfc822date}</i></td>
  47.224+    <td><a class="list" href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}"><b>{bookmark|escape}</b></a></td>
  47.225+    <td class="link">
  47.226+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
  47.227+      <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
  47.228+      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
  47.229+    </td>
  47.230+  </tr>'
  47.231+branches = branches.tmpl
  47.232+branchentry = '
  47.233+  <tr class="parity{parity}">
  47.234+    <td class="age"><i class="age">{date|rfc822date}</i></td>
  47.235+    <td class="{status}"><a class="list" href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}"><b>{branch|escape}</b></a></td>
  47.236+    <td class="link">
  47.237+      <a href="{url|urlescape}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
  47.238+      <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
  47.239+      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
  47.240+    </td>
  47.241+  </tr>'
  47.242+diffblock = '<div class="diffblock"><pre class="sourcelines">{lines}</pre></div>'
  47.243+filediffparent = '
  47.244+  <tr>
  47.245+    <td>parent {rev}</td>
  47.246+    <td style="font-family:monospace">
  47.247+      <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
  47.248+        {node|short}
  47.249+      </a>
  47.250+    </td>
  47.251+  </tr>'
  47.252+filecompparent = '
  47.253+  <tr>
  47.254+    <td>parent {rev}</td>
  47.255+    <td style="font-family:monospace">
  47.256+      <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
  47.257+        {node|short}
  47.258+      </a>
  47.259+    </td>
  47.260+  </tr>'
  47.261+filediffchild = '
  47.262+  <tr>
  47.263+    <td>child {rev}</td>
  47.264+    <td style="font-family:monospace">
  47.265+      <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
  47.266+    </td>
  47.267+  </tr>'
  47.268+filecompchild = '
  47.269+  <tr>
  47.270+    <td>child {rev}</td>
  47.271+    <td style="font-family:monospace">
  47.272+      <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
  47.273+    </td>
  47.274+  </tr>'
  47.275+shortlog = shortlog.tmpl
  47.276+graph = graph.tmpl
  47.277+graphentry = graphentry.tmpl
  47.278+phasetag = '{ifeq(phase, 'public', '', '<span class="phasetag" title="{phase|escape}">{phase|escape}</span> ')}'
  47.279+obsoletetag = '{if(obsolete, '<span class="obsoletetag" title="obsolete">obsolete</span> ')}'
  47.280+instabilitytag = '<span class="instabilitytag" title="{instability|escape}">{instability|escape}</span> '
  47.281+tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
  47.282+branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
  47.283+inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
  47.284+bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
  47.285+alltags = '<span class="logtags">{phasetag}{obsoletetag}{instabilities%instabilitytag}{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>'
  47.286+successorlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
  47.287+obsfatesuccessors = '{if(successors, ' as ')}{successors%successorlink}'
  47.288+obsfateverb = '{obsfateverb(successors, markers)}'
  47.289+obsfateoperations = '{if(obsfateoperations(markers), ' using {join(obsfateoperations(markers), ', ')}')}'
  47.290+obsfateusers = '{if(obsfateusers(markers), ' by {join(obsfateusers(markers)%'{user|obfuscate}', ', ')}')}'
  47.291+obsfatedate = '{if(obsfatedate(markers), ' {ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), '<span class="age">{min(obsfatedate(markers))|rfc822date}</span>', 'between <span class="age">{min(obsfatedate(markers))|rfc822date}</span> and <span class="age">{max(obsfatedate(markers))|rfc822date}</span>')}')}'
  47.292+obsfateentry = '
  47.293+  <tr>
  47.294+    <td>obsolete</td>
  47.295+    <td>{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}</td>
  47.296+  </tr>'
  47.297+instabilitychangesetlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
  47.298+divergentnode = '{instabilitychangesetlink} ({phase})'
  47.299+whyunstableentry = '
  47.300+  <tr>
  47.301+    <td>unstable</td>
  47.302+    <td>{instability}: {if(divergentnodes, divergentnodes%divergentnode)} {reason} {instabilitychangesetlink}</td>
  47.303+  </tr>'
  47.304+shortlogentry = '
  47.305+  <tr class="parity{parity}">
  47.306+    <td class="age"><i class="age">{date|rfc822date}</i></td>
  47.307+    <td><i>{author|person}</i></td>
  47.308+    <td>
  47.309+      <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
  47.310+        <b>{desc|strip|firstline|escape|nonempty}</b>
  47.311+        {alltags}
  47.312+      </a>
  47.313+    </td>
  47.314+    <td class="link" nowrap>
  47.315+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
  47.316+      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
  47.317+    </td>
  47.318+  </tr>'
  47.319+filelogentry = '
  47.320+  <tr class="parity{if(patch, '1', '{parity}')}">
  47.321+    <td class="age"><i class="age">{date|rfc822date}</i></td>
  47.322+    <td><i>{author|person}</i></td>
  47.323+    <td>
  47.324+      <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
  47.325+        <b>{desc|strip|firstline|escape|nonempty}</b>
  47.326+        {alltags}
  47.327+      </a>
  47.328+    </td>
  47.329+    <td class="link">
  47.330+      <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
  47.331+      <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
  47.332+      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
  47.333+      {rename%filelogrename}
  47.334+    </td>
  47.335+  </tr>
  47.336+  {if(patch, '<tr><td colspan="4">{diff}</td></tr>')}'
  47.337+archiveentry = ' | <a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a> '
  47.338+indexentry = '
  47.339+  <tr class="parity{parity}">
  47.340+    <td>
  47.341+      <a class="list" href="{url|urlescape}{sessionvars%urlparameter}">
  47.342+        <b>{name|escape}</b>
  47.343+      </a>
  47.344+    </td>
  47.345+    <td>{description}</td>
  47.346+    <td>{contact|obfuscate}</td>
  47.347+    <td class="age">{lastchange|rfc822date}</td>
  47.348+    <td class="indexlinks">{archives%indexarchiveentry}</td>
  47.349+    <td>{if(isdirectory, '',
  47.350+            '<div class="rss_logo">
  47.351+                <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
  47.352+            </div>'
  47.353+            )}
  47.354+    </td>
  47.355+  </tr>\n'
  47.356+indexarchiveentry = ' <a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
  47.357+index = index.tmpl
  47.358+urlparameter = '{separator}{name}={value|urlescape}'
  47.359+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
  47.360+breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
  47.361+
  47.362+searchform = '
  47.363+  <div class="search">
  47.364+    <form id="searchform" action="{url|urlescape}log">
  47.365+      {sessionvars%hiddenformentry}
  47.366+      <input name="rev" type="text" value="{query|escape}" size="40" />
  47.367+      <div id="hint">{searchhint}</div>
  47.368+    </form>
  47.369+  </div>'
  47.370+searchhint = 'Find changesets by keywords (author, files, the commit message), revision
  47.371+  number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
  47.372+
  47.373+diffoptsform = '
  47.374+  <form id="diffopts-form"
  47.375+    data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
  47.376+    data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
  47.377+    data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
  47.378+    data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
  47.379+    <span>Ignore whitespace changes - </span>
  47.380+    <span>Everywhere:</span>
  47.381+    <input id="ignorews-checkbox" type="checkbox" />
  47.382+    <span>Within whitespace:</span>
  47.383+    <input id="ignorewsamount-checkbox" type="checkbox" />
  47.384+    <span>At end of lines:</span>
  47.385+    <input id="ignorewseol-checkbox" type="checkbox" />
  47.386+  </form>'
    48.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2+++ b/templates/gitweb/notfound.tmpl	Sat Jul 20 22:31:54 2024 -0400
    48.3@@ -0,0 +1,18 @@
    48.4+{header}
    48.5+<title>Mercurial repository not found</title>
    48.6+</head>
    48.7+
    48.8+<body>
    48.9+
   48.10+<div class="page_header">
   48.11+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a> Not found: {repo|escape}
   48.12+</div>
   48.13+
   48.14+<div class="page_body">
   48.15+The specified repository "{repo|escape}" is unknown, sorry.
   48.16+<br/>
   48.17+<br/>
   48.18+Please go back to the <a href="{url|urlescape}">main repository list page</a>.
   48.19+</div>
   48.20+
   48.21+{footer}
    49.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2+++ b/templates/gitweb/search.tmpl	Sat Jul 20 22:31:54 2024 -0400
    49.3@@ -0,0 +1,35 @@
    49.4+{header}
    49.5+<title>{repo|escape}: Search</title>
    49.6+<link rel="alternate" type="application/atom+xml"
    49.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    49.8+<link rel="alternate" type="application/rss+xml"
    49.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   49.10+</head>
   49.11+<body>
   49.12+
   49.13+<div class="page_header">
   49.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   49.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / search
   49.16+</div>
   49.17+
   49.18+<div class="page_nav">
   49.19+<div>
   49.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   49.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   49.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   49.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   49.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   49.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   49.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   49.27+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a>{archives%archiveentry}
   49.28+ |
   49.29+ <a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   49.30+</div>
   49.31+{searchform}
   49.32+</div>
   49.33+
   49.34+<div class="title">searching for {query|escape}</div>
   49.35+
   49.36+{entries%changelogentry}
   49.37+
   49.38+{footer}
    50.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2+++ b/templates/gitweb/shortlog.tmpl	Sat Jul 20 22:31:54 2024 -0400
    50.3@@ -0,0 +1,55 @@
    50.4+{header}
    50.5+<title>{repo|escape}: Shortlog</title>
    50.6+<link rel="alternate" type="application/atom+xml"
    50.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    50.8+<link rel="alternate" type="application/rss+xml"
    50.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   50.10+</head>
   50.11+<body>
   50.12+
   50.13+<div class="page_header">
   50.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   50.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / shortlog
   50.16+</div>
   50.17+
   50.18+<div class="page_nav">
   50.19+<div>
   50.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   50.21+shortlog |
   50.22+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a> |
   50.23+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a> |
   50.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   50.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   50.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   50.27+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
   50.28+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   50.29+<br/>{changenav%navshort}<br/>
   50.30+</div>
   50.31+{searchform}
   50.32+</div>
   50.33+
   50.34+<div class="title">&nbsp;</div>
   50.35+<table class="shortlogtable" cellspacing="0">
   50.36+{entries%shortlogentry}
   50.37+</table>
   50.38+
   50.39+<div class="extra_nav">
   50.40+{changenav%navshort}
   50.41+</div>
   50.42+
   50.43+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
   50.44+    ajaxScrollInit(
   50.45+            '{url|urlescape}shortlog/%next%{sessionvars%urlparameter}',
   50.46+            '{nextentry%"{node}"}', <!-- NEXTHASH
   50.47+            function (htmlText) \{
   50.48+                var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
   50.49+                return m ? m[1] : null;
   50.50+            },
   50.51+            '.shortlogtable > tbody:nth-of-type(1)',
   50.52+            '<tr class="%class%">\
   50.53+            <td colspan="4" style="text-align: center;">%text%</td>\
   50.54+            </tr>'
   50.55+    );
   50.56+</script>
   50.57+
   50.58+{footer}
    51.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.2+++ b/templates/gitweb/summary.tmpl	Sat Jul 20 22:31:54 2024 -0400
    51.3@@ -0,0 +1,62 @@
    51.4+{header}
    51.5+<title>{repo|escape}: Summary</title>
    51.6+<link rel="alternate" type="application/atom+xml"
    51.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    51.8+<link rel="alternate" type="application/rss+xml"
    51.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
   51.10+</head>
   51.11+<body>
   51.12+
   51.13+<div class="page_header">
   51.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   51.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / summary
   51.16+</div>
   51.17+
   51.18+<div class="page_nav">
   51.19+<div>
   51.20+summary |
   51.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   51.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   51.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   51.24+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a> |
   51.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   51.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   51.27+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
   51.28+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   51.29+</div>
   51.30+{searchform}
   51.31+</div>
   51.32+
   51.33+<div class="title">&nbsp;</div>
   51.34+<table cellspacing="0">
   51.35+<tr><td>description</td><td>{desc}</td></tr>
   51.36+<tr><td>owner</td><td>{owner|obfuscate}</td></tr>
   51.37+<tr><td>last change</td><td class="date age">{lastchange|rfc822date}</td></tr>
   51.38+</table>
   51.39+
   51.40+<div><a  class="title" href="{url|urlescape}shortlog{sessionvars%urlparameter}">changes</a></div>
   51.41+<table cellspacing="0">
   51.42+{shortlog%shortlogentry}
   51.43+<tr class="light"><td colspan="4"><a class="list" href="{url|urlescape}shortlog{sessionvars%urlparameter}">...</a></td></tr>
   51.44+</table>
   51.45+
   51.46+<div><a class="title" href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></div>
   51.47+<table cellspacing="0">
   51.48+{tags%tagentry}
   51.49+<tr class="light"><td colspan="3"><a class="list" href="{url|urlescape}tags{sessionvars%urlparameter}">...</a></td></tr>
   51.50+</table>
   51.51+
   51.52+<div><a class="title" href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></div>
   51.53+<table cellspacing="0">
   51.54+{bookmarks%bookmarkentry}
   51.55+<tr class="light"><td colspan="3"><a class="list" href="{url|urlescape}bookmarks{sessionvars%urlparameter}">...</a></td></tr>
   51.56+</table>
   51.57+
   51.58+<div><a class="title" href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></div>
   51.59+<table cellspacing="0">
   51.60+{branches%branchentry}
   51.61+<tr class="light">
   51.62+  <td colspan="3"><a class="list" href="{url|urlescape}branches{sessionvars%urlparameter}">...</a></td>
   51.63+</tr>
   51.64+</table>
   51.65+{footer}
    52.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    52.2+++ b/templates/gitweb/tags.tmpl	Sat Jul 20 22:31:54 2024 -0400
    52.3@@ -0,0 +1,35 @@
    52.4+{header}
    52.5+<title>{repo|escape}: Tags</title>
    52.6+<link rel="alternate" type="application/atom+xml"
    52.7+   href="{url|urlescape}atom-tags" title="Atom feed for {repo|escape}: tags"/>
    52.8+<link rel="alternate" type="application/rss+xml"
    52.9+   href="{url|urlescape}rss-tags" title="RSS feed for {repo|escape}: tags"/>
   52.10+</head>
   52.11+<body>
   52.12+
   52.13+<div class="page_header">
   52.14+<a href="{logourl}" title="Mercurial" style="float: right;">Mercurial</a>
   52.15+<a href="/">Mercurial</a> {pathdef%breadcrumb} / tags
   52.16+</div>
   52.17+
   52.18+<div class="page_nav">
   52.19+<div>
   52.20+<a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a> |
   52.21+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a> |
   52.22+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a> |
   52.23+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a> |
   52.24+tags |
   52.25+<a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a> |
   52.26+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a> |
   52.27+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a> |
   52.28+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
   52.29+</div>
   52.30+{searchform}
   52.31+</div>
   52.32+
   52.33+<div class="title">&nbsp;</div>
   52.34+<table cellspacing="0">
   52.35+{entries%tagentry}
   52.36+</table>
   52.37+
   52.38+{footer}
    54.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.2+++ b/templates/json/changelist.tmpl	Sat Jul 20 22:31:54 2024 -0400
    54.3@@ -0,0 +1,5 @@
    54.4+\{
    54.5+  "node": {node|json},
    54.6+  "changeset_count": {changesets|json},
    54.7+  "changesets": [{join(entries%changelistentry, ", ")}]
    54.8+}
    55.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    55.2+++ b/templates/json/graph.tmpl	Sat Jul 20 22:31:54 2024 -0400
    55.3@@ -0,0 +1,5 @@
    55.4+\{
    55.5+  "node": {node|json},
    55.6+  "changeset_count": {changesets|json},
    55.7+  "changesets": [{join(nodes%graphentry, ", ")}]
    55.8+}
    56.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    56.2+++ b/templates/json/map	Sat Jul 20 22:31:54 2024 -0400
    56.3@@ -0,0 +1,252 @@
    56.4+default = 'shortlog'
    56.5+mimetype = 'application/json'
    56.6+
    56.7+filerevision = '\{
    56.8+  "node": {node|json},
    56.9+  "path": {file|json},
   56.10+  "date": {date|json},
   56.11+  "desc": {desc|utf8|json},
   56.12+  "branch": {if(branch, branch%changesetbranch, "default"|json)},
   56.13+  "bookmarks": [{join(bookmarks%changelistentryname, ", ")}],
   56.14+  "tags": [{join(tags%changelistentryname, ", ")}],
   56.15+  "user": {author|utf8|json},
   56.16+  "parents": [{join(parent%changesetparent, ", ")}],
   56.17+  "phase": {phase|json},
   56.18+  "lines": [{join(text%lineentry, ", ")}]
   56.19+  }'
   56.20+lineentry = '\{
   56.21+  "line": {line|json}
   56.22+  }'
   56.23+search = '\{
   56.24+  "node": {node|json},
   56.25+  "query": {query|json},
   56.26+  "entries": [{join(entries%changelistentry, ", ")}]
   56.27+  }'
   56.28+# changelog and shortlog are the same web API but with different
   56.29+# number of entries.
   56.30+changelog = changelist.tmpl
   56.31+shortlog = changelist.tmpl
   56.32+graph = graph.tmpl
   56.33+changelistentry = '\{
   56.34+  "node": {node|json},
   56.35+  "date": {date|json},
   56.36+  "desc": {desc|utf8|json},
   56.37+  "branch": {if(branch, branch%changesetbranch, "default"|json)},
   56.38+  "bookmarks": [{join(bookmarks%changelistentryname, ", ")}],
   56.39+  "tags": [{join(tags%changelistentryname, ", ")}],
   56.40+  "user": {author|utf8|json},
   56.41+  "phase": {phase|json},
   56.42+  "parents": [{if(allparents, join(allparents%changesetparent, ", "),
   56.43+                  join(parent%changesetparent, ", "))}]
   56.44+  }'
   56.45+graphentry = '\{
   56.46+  "node": {node|json},
   56.47+  "date": {date|json},
   56.48+  "desc": {desc|utf8|json},
   56.49+  "branch": {if(branch, branch%changesetbranch, "default"|json)},
   56.50+  "bookmarks": [{join(bookmarks%changelistentryname, ", ")}],
   56.51+  "tags": [{join(tags%changelistentryname, ", ")}],
   56.52+  "user": {author|utf8|json},
   56.53+  "phase": {phase|json},
   56.54+  "col": {col|json},
   56.55+  "row": {row|json},
   56.56+  "color": {color|json},
   56.57+  "edges": {edges|json},
   56.58+  "parents": [{if(allparents, join(allparents%changesetparent, ", "),
   56.59+                  join(parent%changesetparent, ", "))}]
   56.60+  }'
   56.61+changelistentryname = '{name|utf8|json}'
   56.62+changeset = '\{
   56.63+  "node": {node|json},
   56.64+  "date": {date|json},
   56.65+  "desc": {desc|utf8|json},
   56.66+  "branch": {if(branch, branch%changesetbranch, "default"|json)},
   56.67+  "bookmarks": [{join(changesetbookmark, ", ")}],
   56.68+  "tags": [{join(changesettag, ", ")}],
   56.69+  "user": {author|utf8|json},
   56.70+  "parents": [{join(parent%changesetparent, ", ")}],
   56.71+  "children": [{join(child%changesetparent, ", ")}],
   56.72+  "files": [{join(files, ", ")}],
   56.73+  "diff": [{join(diff, ", ")}],
   56.74+  "phase": {phase|json}
   56.75+  }'
   56.76+changesetbranch = '{name|utf8|json}'
   56.77+changesetbookmark = '{bookmark|utf8|json}'
   56.78+changesettag = '{tag|utf8|json}'
   56.79+changesetparent = '{node|json}'
   56.80+manifest = '\{
   56.81+  "node": {node|json},
   56.82+  "abspath": {path|json},
   56.83+  "directories": [{join(dentries%direntry, ", ")}],
   56.84+  "files": [{join(fentries%fileentry, ", ")}],
   56.85+  "bookmarks": [{join(bookmarks%name, ", ")}],
   56.86+  "tags": [{join(tags%name, ", ")}]
   56.87+  }'
   56.88+name = '{name|utf8|json}'
   56.89+direntry = '\{
   56.90+  "abspath": {path|json},
   56.91+  "basename": {basename|json},
   56.92+  "emptydirs": {emptydirs|json}
   56.93+  }'
   56.94+fileentry = '\{
   56.95+  "abspath": {file|json},
   56.96+  "basename": {basename|json},
   56.97+  "date": {date|json},
   56.98+  "size": {size|json},
   56.99+  "flags": {permissions|json}
  56.100+  }'
  56.101+tags = '\{
  56.102+  "node": {node|json},
  56.103+  "tags": [{join(entriesnotip%tagentry, ", ")}]
  56.104+  }'
  56.105+tagentry = '\{
  56.106+  "tag": {tag|utf8|json},
  56.107+  "node": {node|json},
  56.108+  "date": {date|json}
  56.109+  }'
  56.110+bookmarks = '\{
  56.111+  "node": {node|json},
  56.112+  "bookmarks": [{join(entries%bookmarkentry, ", ")}]
  56.113+  }'
  56.114+bookmarkentry = '\{
  56.115+  "bookmark": {bookmark|utf8|json},
  56.116+  "node": {node|json},
  56.117+  "date": {date|json}
  56.118+  }'
  56.119+branches = '\{
  56.120+  "branches": [{join(entries%branchentry, ", ")}]
  56.121+  }'
  56.122+branchentry = '\{
  56.123+  "branch": {branch|utf8|json},
  56.124+  "node": {node|json},
  56.125+  "date": {date|json},
  56.126+  "status": {status|json}
  56.127+  }'
  56.128+shortlogentry = '{changelistentry}'
  56.129+summary = '\{
  56.130+  "node": {node|json},
  56.131+  "lastchange": {lastchange|json},
  56.132+  "bookmarks": [{join(bookmarks%bookmarkentry, ", ")}],
  56.133+  "branches": [{join(branches%branchentry, ", ")}],
  56.134+  "shortlog": [{join(shortlog%shortlogentry, ", ")}],
  56.135+  "tags": [{join(tags%tagentry, ", ")}],
  56.136+  "archives": [{join(archives%archiveentry, ", ")}],
  56.137+  "labels": {labels|json}
  56.138+  }'
  56.139+archiveentry = '\{
  56.140+  "node": {node|json},
  56.141+  "extension": {extension|json},
  56.142+  "type": {type|json},
  56.143+  "url": {"{urlbase}{url}archive/{node}{extension}"|json}
  56.144+  }'
  56.145+filediff = '\{
  56.146+  "path": {file|json},
  56.147+  "node": {node|json},
  56.148+  "date": {date|json},
  56.149+  "desc": {desc|utf8|json},
  56.150+  "author": {author|utf8|json},
  56.151+  "parents": [{join(parent%changesetparent, ", ")}],
  56.152+  "children": [{join(child%changesetparent, ", ")}],
  56.153+  "diff": [{join(diff, ", ")}]
  56.154+  }'
  56.155+diffblock = '\{
  56.156+  "blockno": {blockno|json},
  56.157+  "lines": [{join(lines, ", ")}]
  56.158+  }'
  56.159+difflineplus = '\{
  56.160+  "t": "+",
  56.161+  "n": {lineno|json},
  56.162+  "l": {line|json}
  56.163+  }'
  56.164+difflineminus = '\{
  56.165+  "t": "-",
  56.166+  "n": {lineno|json},
  56.167+  "l": {line|json}
  56.168+  }'
  56.169+difflineat = '\{
  56.170+  "t": "@",
  56.171+  "n": {lineno|json},
  56.172+  "l": {line|json}
  56.173+  }'
  56.174+diffline = '\{
  56.175+  "t": "",
  56.176+  "n": {lineno|json},
  56.177+  "l": {line|json}
  56.178+  }'
  56.179+filecomparison = '\{
  56.180+  "path": {file|json},
  56.181+  "node": {node|json},
  56.182+  "date": {date|json},
  56.183+  "desc": {desc|utf8|json},
  56.184+  "author": {author|utf8|json},
  56.185+  "parents": [{join(parent%changesetparent, ", ")}],
  56.186+  "children": [{join(child%changesetparent, ", ")}],
  56.187+  "leftnode": {leftnode|json},
  56.188+  "rightnode": {rightnode|json},
  56.189+  "comparison": [{join(comparison, ", ")}]
  56.190+  }'
  56.191+comparisonblock = '\{
  56.192+  "lines": [{join(lines, ", ")}]
  56.193+  }'
  56.194+comparisonline = '\{
  56.195+  "t": {type|json},
  56.196+  "ln": {leftlineno|json},
  56.197+  "ll": {leftline|json},
  56.198+  "rn": {rightlineno|json},
  56.199+  "rl": {rightline|json}
  56.200+  }'
  56.201+fileannotate = '\{
  56.202+  "abspath": {file|json},
  56.203+  "node": {node|json},
  56.204+  "author": {author|utf8|json},
  56.205+  "date": {date|json},
  56.206+  "desc": {desc|utf8|json},
  56.207+  "parents": [{join(parent%changesetparent, ", ")}],
  56.208+  "children": [{join(child%changesetparent, ", ")}],
  56.209+  "permissions": {permissions|json},
  56.210+  "annotate": [{join(annotate%fileannotation, ", ")}]
  56.211+  }'
  56.212+fileannotation = '\{
  56.213+  "node": {node|json},
  56.214+  "author": {author|utf8|json},
  56.215+  "desc": {desc|utf8|json},
  56.216+  "abspath": {file|json},
  56.217+  "targetline": {targetline|json},
  56.218+  "line": {line|json},
  56.219+  "lineno": {lineno|json},
  56.220+  "revdate": {revdate|json}
  56.221+  }'
  56.222+filelog = '\{
  56.223+  "entries": [{join(entries%changelistentry, ", ")}]
  56.224+  }'
  56.225+helptopics = '\{
  56.226+  "topics": [{join(topics%helptopicentry, ", ")}],
  56.227+  "earlycommands": [{join(earlycommands%helptopicentry, ", ")}],
  56.228+  "othercommands": [{join(othercommands%helptopicentry, ", ")}]
  56.229+  }'
  56.230+helptopicentry = '\{
  56.231+  "topic": {topic|utf8|json},
  56.232+  "summary": {summary|utf8|json}
  56.233+  }'
  56.234+help = '\{
  56.235+  "topic": {topic|utf8|json},
  56.236+  "rawdoc": {doc|utf8|json}
  56.237+  }'
  56.238+filenodelink = '\{
  56.239+  "file": {file|json},
  56.240+  "status": {status|json}
  56.241+  }'
  56.242+filenolink = '{filenodelink}'
  56.243+index = '\{
  56.244+  "entries": [{join(entries%indexentry, ", ")}]
  56.245+  }'
  56.246+indexentry = '\{
  56.247+  "name": {name|utf8|json},
  56.248+  "description": {description|utf8|json},
  56.249+  "contact": {contact|utf8|json},
  56.250+  "lastchange": {lastchange|json},
  56.251+  "labels": {labels|json}
  56.252+  }'
  56.253+error = '\{
  56.254+  "error": {error|utf8|json}
  56.255+  }'
    57.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    57.2+++ b/templates/map-cmdline.bisect	Sat Jul 20 22:31:54 2024 -0400
    57.3@@ -0,0 +1,15 @@
    57.4+%include map-cmdline.default
    57.5+
    57.6+[templates]
    57.7+changeset = '{cset}{lbisect}{branches}{bookmarks}{tags}{parents}{luser}{ldate}{summary}\n'
    57.8+changeset_quiet = '{lshortbisect} {rev}:{node|short}\n'
    57.9+changeset_verbose = '{cset}{lbisect}{branches}{bookmarks}{tags}{parents}{luser}{ldate}{lfiles}{lfile_copies_switch}{description}\n'
   57.10+changeset_debug = '{fullcset}{lbisect}{branches}{bookmarks}{tags}{lphase}{parents}{manifest}{luser}{ldate}{lfile_mods}{lfile_adds}{lfile_dels}{lfile_copies_switch}{extras}{description}\n'
   57.11+
   57.12+# We take the zeroth word in order to omit "(implicit)" in the label
   57.13+bisectlabel = ' bisect.{word('0', bisect)}'
   57.14+
   57.15+lbisect ='{label("log.bisect{if(bisect, bisectlabel)}",
   57.16+                                "bisect:      {bisect}\n")}'
   57.17+lshortbisect ='{label("log.bisect{if(bisect, bisectlabel)}",
   57.18+                                    "{bisect|shortbisect}")}'
    58.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    58.2+++ b/templates/map-cmdline.changelog	Sat Jul 20 22:31:54 2024 -0400
    58.3@@ -0,0 +1,18 @@
    58.4+[templates]
    58.5+header = '{date|shortdate}  {author|person}  <{author|email}>\n\n'
    58.6+header_verbose = ''
    58.7+changeset = '\t* {files|stringify|fill68|tabindent}{desc|fill68|tabindent|strip}\n\t[{node|short}]{tags}{branches}\n\n'
    58.8+changeset_quiet = '\t* {desc|firstline|fill68|tabindent|strip}\n\n'
    58.9+changeset_verbose = '{date|isodate}  {author|person}  <{author|email}>  ({node|short}{tags}{branches})\n\n\t* {file_adds|stringify|fill68|tabindent}{file_dels|stringify|fill68|tabindent}{files|stringify|fill68|tabindent}{desc|fill68|tabindent|strip}\n\n'
   58.10+start_tags = ' ['
   58.11+tag = '{tag}, '
   58.12+last_tag = '{tag}]'
   58.13+start_branches = ' <'
   58.14+branch = '{branch}, '
   58.15+last_branch = '{branch}>'
   58.16+file = '{file}, '
   58.17+last_file = '{file}:\n\t'
   58.18+file_add = '{file_add}, '
   58.19+last_file_add = '{file_add}: new file.\n* '
   58.20+file_del = '{file_del}, '
   58.21+last_file_del = '{file_del}: deleted file.\n* '
    59.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    59.2+++ b/templates/map-cmdline.compact	Sat Jul 20 22:31:54 2024 -0400
    59.3@@ -0,0 +1,31 @@
    59.4+[templates]
    59.5+ldate = '{label("log.date",
    59.6+                "{date|isodate}")}'
    59.7+
    59.8+ldesc = '{label('ui.note log.description',
    59.9+                      '{desc|strip}')}'
   59.10+ldescfirst = '{label('ui.note log.description',
   59.11+                     '{desc|firstline|strip}')}'
   59.12+
   59.13+changeset = '{lrev}{tags}{bookmarks}{parents}   {lnode}   {ldate}   {luser}\n  {ldescfirst}\n\n'
   59.14+changeset_quiet = '{lrev}:{lnode}\n'
   59.15+changeset_verbose = '{lrev}{tags}{parents}   {lnode}   {ldate}   {lauthor}\n  {ldesc}\n\n'
   59.16+lrev = '{label("log.changeset changeset.{phase}",
   59.17+              "{rev}")}'
   59.18+lnode = '{label("log.node",
   59.19+                "{node|short}")}'
   59.20+lauthor = '{label("log.user",
   59.21+                  "{author}")}'
   59.22+luser = '{label("log.user",
   59.23+                "{author|user}")}'
   59.24+start_tags = '['
   59.25+tag = '{label("log.tag",
   59.26+              "{tag},")}'
   59.27+last_tag = '{tag}]'
   59.28+start_parents = ':'
   59.29+parent = '{lrev},'
   59.30+last_parent = '{lrev}'
   59.31+start_bookmarks = '['
   59.32+bookmark = '{label("log.bookmark",
   59.33+                   "{bookmark},")}'
   59.34+last_bookmark = '{bookmark}]'
    60.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.2+++ b/templates/map-cmdline.default	Sat Jul 20 22:31:54 2024 -0400
    60.3@@ -0,0 +1,91 @@
    60.4+# Base templates. Due to name clashes with existing keywords, we have
    60.5+# to replace some keywords with 'lkeyword', for 'labelled keyword'
    60.6+
    60.7+[templates]
    60.8+changeset = '{cset}{branches}{bookmarks}{tags}{parents}{luser}{ldate}{ltroubles}{lobsfate}{summary}\n'
    60.9+changeset_quiet = '{lnode}'
   60.10+changeset_verbose = '{cset}{branches}{bookmarks}{tags}{parents}{luser}{ldate}{ltroubles}{lobsfate}{lfiles}{lfile_copies_switch}{description}\n'
   60.11+changeset_debug = '{fullcset}{branches}{bookmarks}{tags}{lphase}{parents}{manifest}{luser}{ldate}{ltroubles}{lobsfate}{lfile_mods}{lfile_adds}{lfile_dels}{lfile_copies_switch}{extras}{description}\n'
   60.12+
   60.13+# File templates
   60.14+lfiles = '{if(files,
   60.15+               label("ui.note log.files",
   60.16+                     "files:       {files}\n"))}'
   60.17+
   60.18+lfile_mods = '{if(file_mods,
   60.19+                  label("ui.debug log.files",
   60.20+                        "files:       {file_mods}\n"))}'
   60.21+
   60.22+lfile_adds = '{if(file_adds,
   60.23+                  label("ui.debug log.files",
   60.24+                        "files+:      {file_adds}\n"))}'
   60.25+
   60.26+lfile_dels = '{if(file_dels,
   60.27+                  label("ui.debug log.files",
   60.28+                        "files-:      {file_dels}\n"))}'
   60.29+
   60.30+lfile_copies_switch = '{if(file_copies_switch,
   60.31+                           label("ui.note log.copies",
   60.32+                                 "copies:     {file_copies_switch
   60.33+                                               % ' {name} ({source})'}\n"))}'
   60.34+
   60.35+# General templates
   60.36+cset = '{labelcset("changeset:   {rev}:{node|short}")}\n'
   60.37+fullcset = '{labelcset("changeset:   {rev}:{node}")}\n'
   60.38+
   60.39+lphase = '{label("log.phase",
   60.40+                 "phase:       {phase}")}\n'
   60.41+
   60.42+parent = '{label("log.parent changeset.{phase}",
   60.43+                  "parent:      {rev}:{node|formatnode}")}\n'
   60.44+
   60.45+lnode = '{label("log.node",
   60.46+                "{rev}:{node|short}")}\n'
   60.47+
   60.48+manifest = '{label("ui.debug log.manifest",
   60.49+                   "manifest:    {rev}:{node}")}\n'
   60.50+
   60.51+branch = '{label("log.branch",
   60.52+                 "branch:      {branch}")}\n'
   60.53+
   60.54+tag = '{label("log.tag",
   60.55+              "tag:         {tag}")}\n'
   60.56+
   60.57+bookmark = '{label("log.bookmark",
   60.58+                   "bookmark:    {bookmark}")}\n'
   60.59+
   60.60+luser = '{label("log.user",
   60.61+                "user:        {author}")}\n'
   60.62+
   60.63+summary = '{if(desc|strip, "{label('log.summary',
   60.64+                                   'summary:     {desc|firstline}')}\n")}'
   60.65+
   60.66+ldate = '{label("log.date",
   60.67+                "date:        {date|date}")}\n'
   60.68+
   60.69+ltroubles = '{if(instabilities, "{label('log.instability',
   60.70+                                   'instability: {join(instabilities, ", ")}')}\n")}'
   60.71+
   60.72+extra = '{label("ui.debug log.extra",
   60.73+                "extra:       {key}={value|stringescape}")}\n'
   60.74+
   60.75+description = '{if(desc|strip, "{label('ui.note log.description',
   60.76+                                       'description:')}
   60.77+                                {label('ui.note log.description',
   60.78+                                       '{desc|strip}')}\n\n")}'
   60.79+
   60.80+status = '{status} {path|relpath}\n{if(source, "  {source|relpath}\n")}'
   60.81+
   60.82+# Obsfate templates, it would be removed once we introduce the obsfate
   60.83+# template fragment
   60.84+lobsfate = '{if(obsfate, "{label('log.obsfate', '{obsfate % "obsolete:    {fate}\n"}')}")}'
   60.85+
   60.86+[templatealias]
   60.87+labelcset(expr) = label(separate(" ",
   60.88+                                 "log.changeset",
   60.89+                                 "changeset.{phase}",
   60.90+                                 if(obsolete, "changeset.obsolete"),
   60.91+                                 if(instabilities, "changeset.unstable"),
   60.92+                                 join(instabilities
   60.93+                                      % "instability.{instability}", " ")),
   60.94+                        expr)
    61.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    61.2+++ b/templates/map-cmdline.phases	Sat Jul 20 22:31:54 2024 -0400
    61.3@@ -0,0 +1,5 @@
    61.4+%include map-cmdline.default
    61.5+
    61.6+[templates]
    61.7+changeset = '{cset}{branches}{bookmarks}{tags}{lphase}{parents}{luser}{ldate}{summary}\n'
    61.8+changeset_verbose = '{cset}{branches}{bookmarks}{tags}{lphase}{parents}{luser}{ldate}{lfiles}{lfile_copies_switch}{description}\n'
    62.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.2+++ b/templates/map-cmdline.show	Sat Jul 20 22:31:54 2024 -0400
    62.3@@ -0,0 +1,25 @@
    62.4+# TODO there are a few deficiencies in this file:
    62.5+# * The "namespace" of the labels needs to be worked out. We currently
    62.6+#   piggyback on existing values so color works.
    62.7+
    62.8+%include map-cmdline.default
    62.9+
   62.10+[templates]
   62.11+showbookmarks = '{if(active, "*", " ")} {pad(bookmark, longestbookmarklen + 4)}{shortest(node, nodelen)}\n'
   62.12+
   62.13+showwork = '{cset_shortnode}{namespaces % cset_namespace} {cset_shortdesc}'
   62.14+showstack = '{showwork}'
   62.15+
   62.16+cset_shortnode = '{labelcset(shortest(node, nodelen))}'
   62.17+
   62.18+# Treat branch and tags specially so we don't display "default" or "tip"
   62.19+cset_namespace = '{ifeq(namespace, "branches", names_branches, ifeq(namespace, "tags", names_tags, names_others))}'
   62.20+names_branches = '{ifeq(branch, "default", "", " ({label('log.{colorname}', branch)})")}'
   62.21+names_tags = '{if(filter_tags(names),
   62.22+                  " ({label('log.{colorname}', join(filter_tags(names), ' '))})")}'
   62.23+names_others = '{if(names, " ({label('log.{colorname}', join(names, ' '))})")}'
   62.24+
   62.25+cset_shortdesc = '{label("log.description", desc|firstline)}'
   62.26+
   62.27+[templatealias]
   62.28+filter_tags(names) = filter(names, ifeq(name, 'tip', '', name))
    63.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    63.2+++ b/templates/map-cmdline.status	Sat Jul 20 22:31:54 2024 -0400
    63.3@@ -0,0 +1,21 @@
    63.4+%include map-cmdline.default
    63.5+
    63.6+[templates]
    63.7+# Override base templates
    63.8+changeset = '{cset}{branches}{bookmarks}{tags}{parents}{luser}{ldate}{summary}{lfiles}\n'
    63.9+changeset_verbose = '{cset}{branches}{bookmarks}{tags}{parents}{luser}{ldate}{description}{lfiles}\n'
   63.10+changeset_debug = '{fullcset}{branches}{bookmarks}{tags}{lphase}{parents}{manifest}{luser}{ldate}{extras}{description}{lfiles}\n'
   63.11+
   63.12+# Override the file templates
   63.13+lfiles = '{if(files,
   63.14+              label('ui.note log.files',
   63.15+                    'files:\n'))}{lfile_mods}{lfile_adds}{lfile_dels}'
   63.16+
   63.17+lfile_adds = '{file_adds % "{lfile_add}{lfile_src}"}'
   63.18+lfile_mods = '{file_mods % "{lfile_mod}{lfile_src}"}'
   63.19+lfile_add = '{label("status.added", "A {file}\n")}'
   63.20+lfile_mod = '{label("status.modified", "M {file}\n")}'
   63.21+lfile_src = '{ifcontains(file, file_copies_switch,
   63.22+              label("status.copied", "  {get(file_copies_switch, file)}\n"))}'
   63.23+
   63.24+lfile_dels = '{file_dels % "{label('status.removed', 'R {file}\n')}"}'
    64.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.2+++ b/templates/map-cmdline.xml	Sat Jul 20 22:31:54 2024 -0400
    64.3@@ -0,0 +1,21 @@
    64.4+[templates]
    64.5+docheader = '<?xml version="1.0"?>\n<log>\n'
    64.6+docfooter = '</log>\n'
    64.7+
    64.8+changeset = '<logentry revision="{rev}" node="{node}">\n{branches}{bookmarks}{tags}{parents}<author email="{author|email|xmlescape}">{author|person|xmlescape}</author>\n<date>{date|rfc3339date}</date>\n<msg xml:space="preserve">{desc|xmlescape}</msg>\n</logentry>\n'
    64.9+changeset_verbose = '<logentry revision="{rev}" node="{node}">\n{branches}{bookmarks}{tags}{parents}<author email="{author|email|xmlescape}">{author|person|xmlescape}</author>\n<date>{date|rfc3339date}</date>\n<msg xml:space="preserve">{desc|xmlescape}</msg>\n<paths>\n{file_adds}{file_dels}{file_mods}</paths>\n{file_copies}</logentry>\n'
   64.10+changeset_debug = '<logentry revision="{rev}" node="{node}">\n{branches}{bookmarks}{tags}{parents}<author email="{author|email|xmlescape}">{author|person|xmlescape}</author>\n<date>{date|rfc3339date}</date>\n<msg xml:space="preserve">{desc|xmlescape}</msg>\n<paths>\n{file_adds}{file_dels}{file_mods}</paths>\n{file_copies}{extras}</logentry>\n'
   64.11+
   64.12+file_add  = '<path action="A">{file_add|xmlescape}</path>\n'
   64.13+file_mod  = '<path action="M">{file_mod|xmlescape}</path>\n'
   64.14+file_del  = '<path action="R">{file_del|xmlescape}</path>\n'
   64.15+
   64.16+start_file_copies = '<copies>\n'
   64.17+file_copy = '<copy source="{source|xmlescape}">{name|xmlescape}</copy>\n'
   64.18+end_file_copies = '</copies>\n'
   64.19+
   64.20+parent = '<parent revision="{rev}" node="{node}" />\n'
   64.21+branch = '<branch>{branch|xmlescape}</branch>\n'
   64.22+tag = '<tag>{tag|xmlescape}</tag>\n'
   64.23+bookmark = '<bookmark>{bookmark|xmlescape}</bookmark>\n'
   64.24+extra = '<extra key="{key|xmlescape}">{value|xmlescape}</extra>\n'
    66.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    66.2+++ b/templates/monoblue/bookmarks.tmpl	Sat Jul 20 22:31:54 2024 -0400
    66.3@@ -0,0 +1,32 @@
    66.4+{header}
    66.5+    <title>{repo|escape}: Bookmarks</title>
    66.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-bookmarks" title="Atom feed for {repo|escape}: bookmarks"/>
    66.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-bookmarks" title="RSS feed for {repo|escape}: bookmarks"/>
    66.8+</head>
    66.9+
   66.10+<body>
   66.11+<div id="container">
   66.12+    <div class="page-header">
   66.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / bookmarks</h1>
   66.14+
   66.15+        {searchform}
   66.16+
   66.17+        <ul class="page-nav">
   66.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   66.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   66.20+            <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
   66.21+            <li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   66.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   66.23+            <li class="current">bookmarks</li>
   66.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   66.25+            <li><a href="{url|urlescape}file{sessionvars%urlparameter}">files</a></li>
   66.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   66.27+        </ul>
   66.28+    </div>
   66.29+
   66.30+    <h2 class="no-link no-border">bookmarks</h2>
   66.31+    <table cellspacing="0">
   66.32+{entries%bookmarkentry}
   66.33+    </table>
   66.34+
   66.35+{footer}
    67.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    67.2+++ b/templates/monoblue/branches.tmpl	Sat Jul 20 22:31:54 2024 -0400
    67.3@@ -0,0 +1,32 @@
    67.4+{header}
    67.5+    <title>{repo|escape}: Branches</title>
    67.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-branches" title="Atom feed for {repo|escape}: branches"/>
    67.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-branches" title="RSS feed for {repo|escape}: branches"/>
    67.8+</head>
    67.9+
   67.10+<body>
   67.11+<div id="container">
   67.12+    <div class="page-header">
   67.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / branches</h1>
   67.14+
   67.15+        {searchform}
   67.16+
   67.17+        <ul class="page-nav">
   67.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   67.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   67.20+            <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
   67.21+            <li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   67.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   67.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   67.24+            <li class="current">branches</li>
   67.25+            <li><a href="{url|urlescape}file{sessionvars%urlparameter}">files</a></li>
   67.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   67.27+        </ul>
   67.28+    </div>
   67.29+
   67.30+    <h2 class="no-link no-border">branches</h2>
   67.31+    <table cellspacing="0">
   67.32+{entries%branchentry}
   67.33+    </table>
   67.34+
   67.35+{footer}
    68.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    68.2+++ b/templates/monoblue/changelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
    68.3@@ -0,0 +1,37 @@
    68.4+{header}
    68.5+    <title>{repo|escape}: changelog</title>
    68.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    68.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    68.8+</head>
    68.9+
   68.10+<body>
   68.11+<div id="container">
   68.12+    <div class="page-header">
   68.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / changelog</h1>
   68.14+
   68.15+        {searchform}
   68.16+
   68.17+        <ul class="page-nav">
   68.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   68.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   68.20+            <li class="current">changelog</li>
   68.21+            <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   68.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   68.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   68.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   68.25+            <li><a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a></li>
   68.26+            {archives%archiveentry}
   68.27+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   68.28+        </ul>
   68.29+    </div>
   68.30+
   68.31+    <h2 class="no-link no-border">changelog</h2>
   68.32+    <div>
   68.33+    {entries%changelogentry}
   68.34+    </div>
   68.35+
   68.36+    <div class="page-path">
   68.37+{changenav%nav}
   68.38+    </div>
   68.39+
   68.40+{footer}
    69.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    69.2+++ b/templates/monoblue/changelogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
    69.3@@ -0,0 +1,11 @@
    69.4+<h3 class="changelog">
    69.5+    <a class="title" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
    69.6+        {desc|strip|firstline|escape|nonempty}
    69.7+        {alltags}
    69.8+    </a>
    69.9+</h3>
   69.10+<ul class="changelog-entry">
   69.11+    <li class="age">{date|rfc822date}</li>
   69.12+    <li>by <span class="name">{author|obfuscate}</span> <span class="revdate">[{date|rfc822date}] rev {rev}</span></li>
   69.13+    <li class="description">{desc|strip|escape|websub|addbreaks|nonempty}</li>
   69.14+</ul>
    70.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    70.2+++ b/templates/monoblue/changeset.tmpl	Sat Jul 20 22:31:54 2024 -0400
    70.3@@ -0,0 +1,67 @@
    70.4+{header}
    70.5+<title>{repo|escape}: changeset {rev}:{node|short}</title>
    70.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    70.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    70.8+</head>
    70.9+
   70.10+<body>
   70.11+<div id="container">
   70.12+    <div class="page-header">
   70.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / changeset</h1>
   70.14+
   70.15+        {searchform}
   70.16+
   70.17+        <ul class="page-nav">
   70.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   70.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   70.20+            <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
   70.21+            <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   70.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   70.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   70.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   70.25+            <li><a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a></li>
   70.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   70.27+        </ul>
   70.28+    </div>
   70.29+
   70.30+    <ul class="submenu">
   70.31+        <li class="current">changeset</li>
   70.32+        <li><a href="{url|urlescape}raw-rev/{symrev}">raw</a></li>
   70.33+        {archives%archiveentry}
   70.34+    </ul>
   70.35+
   70.36+    <h2 class="no-link no-border">changeset</h2>
   70.37+
   70.38+    <h3 class="changeset">
   70.39+        <a href="{url|urlescape}raw-rev/{node|short}">
   70.40+            {desc|strip|escape|firstline|nonempty}
   70.41+            {alltags}
   70.42+        </a>
   70.43+    </h3>
   70.44+    <p class="changeset-age"><span class="age">{date|rfc822date}</span></p>
   70.45+
   70.46+    <dl class="overview">
   70.47+        <dt>author</dt>
   70.48+        <dd>{author|obfuscate}</dd>
   70.49+        <dt>date</dt>
   70.50+        <dd class="date age">{date|rfc822date}</dd>
   70.51+        {branch%changesetbranch}
   70.52+        <dt>changeset {rev}</dt>
   70.53+        <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
   70.54+        {if(obsolete, succsandmarkers%obsfateentry)}
   70.55+        {if(instabilities, whyunstable%whyunstableentry)}
   70.56+        {ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}
   70.57+        {child%changesetchild}
   70.58+    </dl>
   70.59+
   70.60+    <p class="description">{desc|strip|escape|websub|addbreaks|nonempty}</p>
   70.61+
   70.62+    <table>
   70.63+    {files}
   70.64+    </table>
   70.65+
   70.66+    <div class="diff diffblocks">
   70.67+    {diff}
   70.68+    </div>
   70.69+
   70.70+{footer}
    71.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    71.2+++ b/templates/monoblue/error.tmpl	Sat Jul 20 22:31:54 2024 -0400
    71.3@@ -0,0 +1,30 @@
    71.4+{header}
    71.5+    <title>{repo|escape}: Error</title>
    71.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    71.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    71.8+</head>
    71.9+
   71.10+<body>
   71.11+<div id="container">
   71.12+    <div class="page-header">
   71.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / not found: {repo|escape}</h1>
   71.14+
   71.15+        {searchform}
   71.16+
   71.17+        <ul class="page-nav">
   71.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   71.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   71.20+            <li><a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a></li>
   71.21+            <li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   71.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   71.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   71.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   71.25+            <li><a href="{url|urlescape}file{sessionvars%urlparameter}">files</a></li>
   71.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   71.27+        </ul>
   71.28+    </div>
   71.29+
   71.30+    <h2 class="no-link no-border">An error occurred while processing your request</h2>
   71.31+    <p class="normal">{error|escape}</p>
   71.32+
   71.33+{footer}
    72.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    72.2+++ b/templates/monoblue/fileannotate.tmpl	Sat Jul 20 22:31:54 2024 -0400
    72.3@@ -0,0 +1,61 @@
    72.4+{header}
    72.5+<title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
    72.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    72.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    72.8+</head>
    72.9+
   72.10+<body>
   72.11+<div id="container">
   72.12+    <div class="page-header">
   72.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / annotate</h1>
   72.14+
   72.15+        {searchform}
   72.16+
   72.17+        <ul class="page-nav">
   72.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   72.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   72.20+            <li><a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a></li>
   72.21+            <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   72.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   72.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   72.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   72.25+            <li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
   72.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   72.27+        </ul>
   72.28+    </div>
   72.29+
   72.30+    <ul class="submenu">
   72.31+        <li><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
   72.32+        <li><a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
   72.33+        <li><a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
   72.34+        <li class="current">annotate</li>
   72.35+        <li><a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
   72.36+        <li><a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a></li>
   72.37+        <li><a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a></li>
   72.38+    </ul>
   72.39+
   72.40+    <h2 class="no-link no-border">{file|escape}@{node|short} (annotated)</h2>
   72.41+    <h3 class="changeset">{file|escape}</h3>
   72.42+    <p class="changeset-age"><span class="age">{date|rfc822date}</span></p>
   72.43+
   72.44+    <dl class="overview">
   72.45+        <dt>author</dt>
   72.46+        <dd>{author|obfuscate}</dd>
   72.47+        <dt>date</dt>
   72.48+        <dd class="date age">{date|rfc822date}</dd>
   72.49+        {branch%filerevbranch}
   72.50+        <dt>changeset {rev}</dt>
   72.51+        <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
   72.52+        {parent%fileannotateparent}
   72.53+        {child%fileannotatechild}
   72.54+        <dt>permissions</dt>
   72.55+        <dd>{permissions|permissions}</dd>
   72.56+    </dl>
   72.57+
   72.58+    <p class="description">{desc|strip|escape|websub|addbreaks|nonempty}</p>
   72.59+
   72.60+    <table class="annotated">
   72.61+    {annotate%annotateline}
   72.62+    </table>
   72.63+
   72.64+{footer}
    73.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    73.2+++ b/templates/monoblue/filecomparison.tmpl	Sat Jul 20 22:31:54 2024 -0400
    73.3@@ -0,0 +1,67 @@
    73.4+{header}
    73.5+<title>{repo|escape}: comparison {file|escape}</title>
    73.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    73.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    73.8+</head>
    73.9+
   73.10+<body>
   73.11+<div id="container">
   73.12+    <div class="page-header">
   73.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / file comparison</h1>
   73.14+
   73.15+        {searchform}
   73.16+
   73.17+        <ul class="page-nav">
   73.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   73.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   73.20+            <li><a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a></li>
   73.21+            <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   73.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   73.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   73.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   73.25+            <li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
   73.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   73.27+        </ul>
   73.28+    </div>
   73.29+
   73.30+    <ul class="submenu">
   73.31+        <li><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
   73.32+        <li><a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
   73.33+        <li><a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
   73.34+        <li><a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
   73.35+        <li><a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
   73.36+        <li class="current">comparison</li>
   73.37+        <li><a href="{url|urlescape}raw-diff/{symrev}/{file|urlescape}">raw</a></li>
   73.38+    </ul>
   73.39+
   73.40+    <h2 class="no-link no-border">comparison: {file|escape}</h2>
   73.41+    <h3 class="changeset">{file|escape}</h3>
   73.42+
   73.43+    <dl class="overview">
   73.44+        {branch%filerevbranch}
   73.45+        <dt>changeset {rev}</dt>
   73.46+        <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
   73.47+        {parent%filecompparent}
   73.48+        {child%filecompchild}
   73.49+    </dl>
   73.50+
   73.51+    <div class="legend">
   73.52+      <span class="legendinfo equal">equal</span>
   73.53+      <span class="legendinfo delete">deleted</span>
   73.54+      <span class="legendinfo insert">inserted</span>
   73.55+      <span class="legendinfo replace">replaced</span>
   73.56+    </div>
   73.57+
   73.58+    <div class="comparison">
   73.59+      <table class="bigtable">
   73.60+        <thead class="header">
   73.61+          <tr>
   73.62+            <th>{leftrev}:{leftnode|short}</th>
   73.63+            <th>{rightrev}:{rightnode|short}</th>
   73.64+          </tr>
   73.65+        </thead>
   73.66+        {comparison}
   73.67+      </table>
   73.68+    </div>
   73.69+
   73.70+{footer}
    74.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    74.2+++ b/templates/monoblue/filediff.tmpl	Sat Jul 20 22:31:54 2024 -0400
    74.3@@ -0,0 +1,52 @@
    74.4+{header}
    74.5+<title>{repo|escape}: diff {file|escape}</title>
    74.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    74.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    74.8+</head>
    74.9+
   74.10+<body>
   74.11+<div id="container">
   74.12+    <div class="page-header">
   74.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / file diff</h1>
   74.14+
   74.15+        {searchform}
   74.16+
   74.17+        <ul class="page-nav">
   74.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   74.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   74.20+            <li><a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a></li>
   74.21+            <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   74.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   74.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   74.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   74.25+            <li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
   74.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   74.27+        </ul>
   74.28+    </div>
   74.29+
   74.30+    <ul class="submenu">
   74.31+        <li><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
   74.32+        <li><a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
   74.33+        <li><a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
   74.34+        <li><a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
   74.35+        <li class="current">diff</li>
   74.36+        <li><a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a></li>
   74.37+        <li><a href="{url|urlescape}raw-diff/{symrev}/{file|urlescape}">raw</a></li>
   74.38+    </ul>
   74.39+
   74.40+    <h2 class="no-link no-border">diff: {file|escape}</h2>
   74.41+    <h3 class="changeset">{file|escape}</h3>
   74.42+
   74.43+    <dl class="overview">
   74.44+        {branch%filerevbranch}
   74.45+        <dt>changeset {rev}</dt>
   74.46+        <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
   74.47+        {parent%filediffparent}
   74.48+        {child%filediffchild}
   74.49+    </dl>
   74.50+
   74.51+    <div class="diff diffblocks">
   74.52+    {diff}
   74.53+    </div>
   74.54+
   74.55+{footer}
    75.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    75.2+++ b/templates/monoblue/filelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
    75.3@@ -0,0 +1,46 @@
    75.4+{header}
    75.5+<title>{repo|escape}: File revisions</title>
    75.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    75.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    75.8+</head>
    75.9+
   75.10+<body>
   75.11+<div id="container">
   75.12+    <div class="page-header">
   75.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / file revisions</h1>
   75.14+
   75.15+        {searchform}
   75.16+
   75.17+        <ul class="page-nav">
   75.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   75.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   75.20+            <li><a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a></li>
   75.21+            <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   75.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   75.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   75.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   75.25+            <li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
   75.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   75.27+        </ul>
   75.28+    </div>
   75.29+
   75.30+    <ul class="submenu">
   75.31+        <li><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
   75.32+        <li class="current">revisions</li>
   75.33+        <li><a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
   75.34+        <li><a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
   75.35+        <li><a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a></li>
   75.36+        <li><a href="{url|urlescape}rss-log/tip/{file|urlescape}">rss</a></li>
   75.37+    </ul>
   75.38+
   75.39+    <h2 class="no-link no-border">{file|urlescape}</h2>
   75.40+
   75.41+    <table>
   75.42+    {entries%filelogentry}
   75.43+    </table>
   75.44+
   75.45+    <div class="page-path">
   75.46+    {nav%filenav}
   75.47+    </div>
   75.48+
   75.49+{footer}
    76.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    76.2+++ b/templates/monoblue/filerevision.tmpl	Sat Jul 20 22:31:54 2024 -0400
    76.3@@ -0,0 +1,61 @@
    76.4+{header}
    76.5+<title>{repo|escape}: {file|escape}@{node|short}</title>
    76.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    76.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    76.8+</head>
    76.9+
   76.10+<body>
   76.11+<div id="container">
   76.12+    <div class="page-header">
   76.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / file revision</h1>
   76.14+
   76.15+        {searchform}
   76.16+
   76.17+        <ul class="page-nav">
   76.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   76.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   76.20+            <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
   76.21+            <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   76.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   76.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   76.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   76.25+            <li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
   76.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   76.27+        </ul>
   76.28+    </div>
   76.29+
   76.30+    <ul class="submenu">
   76.31+        <li class="current">file</li>
   76.32+        <li><a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
   76.33+        <li><a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
   76.34+        <li><a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
   76.35+        <li><a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
   76.36+        <li><a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a></li>
   76.37+        <li><a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a></li>
   76.38+    </ul>
   76.39+
   76.40+    <h2 class="no-link no-border">{file|escape}@{node|short}</h2>
   76.41+    <h3 class="changeset">{file|escape}</h3>
   76.42+    <p class="changeset-age"><span class="age">{date|rfc822date}</span></p>
   76.43+
   76.44+    <dl class="overview">
   76.45+        <dt>author</dt>
   76.46+        <dd>{author|obfuscate}</dd>
   76.47+        <dt>date</dt>
   76.48+        <dd class="date age">{date|rfc822date}</dd>
   76.49+        {branch%filerevbranch}
   76.50+        <dt>changeset {rev}</dt>
   76.51+        <dd><a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
   76.52+        {parent%filerevparent}
   76.53+        {child%filerevchild}
   76.54+        <dt>permissions</dt>
   76.55+        <dd>{permissions|permissions}</dd>
   76.56+    </dl>
   76.57+
   76.58+    <p class="description">{desc|strip|escape|websub|addbreaks|nonempty}</p>
   76.59+
   76.60+    <div class="source">
   76.61+        <pre class="sourcelines stripes">{text%fileline}</pre>
   76.62+    </div>
   76.63+
   76.64+{footer}
    77.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    77.2+++ b/templates/monoblue/footer.tmpl	Sat Jul 20 22:31:54 2024 -0400
    77.3@@ -0,0 +1,17 @@
    77.4+    <div class="page-footer">
    77.5+        <p>Mercurial Repository: {repo|escape}</p>
    77.6+        <ul class="rss-logo">
    77.7+            <li><a href="{url|urlescape}rss-log">RSS</a></li>
    77.8+            <li><a href="{url|urlescape}atom-log">Atom</a></li>
    77.9+        </ul>
   77.10+        {motd}
   77.11+    </div>
   77.12+
   77.13+    <div id="powered-by">
   77.14+        <p><a href="{logourl}" title="Mercurial"><img src="{staticurl|urlescape}{logoimg}" width=75 height=90 border=0 alt="mercurial" /></a></p>
   77.15+    </div>
   77.16+
   77.17+</div>
   77.18+
   77.19+</body>
   77.20+</html>
    78.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    78.2+++ b/templates/monoblue/graph.tmpl	Sat Jul 20 22:31:54 2024 -0400
    78.3@@ -0,0 +1,65 @@
    78.4+{header}
    78.5+    <title>{repo|escape}: graph</title>
    78.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    78.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    78.8+</head>
    78.9+
   78.10+<body>
   78.11+<div id="container">
   78.12+    <div class="page-header">
   78.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / graph</h1>
   78.14+
   78.15+        {searchform}
   78.16+
   78.17+        <ul class="page-nav">
   78.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   78.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   78.20+            <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
   78.21+            <li class="current">graph</li>
   78.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   78.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   78.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   78.25+            <li><a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a></li>
   78.26+            {archives%archiveentry}
   78.27+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   78.28+        </ul>
   78.29+    </div>
   78.30+
   78.31+    <h2 class="no-link no-border">graph</h2>
   78.32+
   78.33+    <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div>
   78.34+    <div id="wrapper">
   78.35+        <canvas id="graph"></canvas>
   78.36+        <ul id="graphnodes">{nodes%graphentry}</ul>
   78.37+    </div>
   78.38+
   78.39+    <script{if(nonce, ' nonce="{nonce}"')}>
   78.40+    document.getElementById('noscript').style.display = 'none';
   78.41+
   78.42+    var data = {jsdata|json};
   78.43+    var graph = new Graph();
   78.44+    graph.scale({bg_height});
   78.45+    graph.render(data);
   78.46+    </script>
   78.47+
   78.48+    <div class="page-path">
   78.49+        <a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
   78.50+        <a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
   78.51+        | {changenav%navgraph}
   78.52+    </div>
   78.53+
   78.54+    <script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
   78.55+    ajaxScrollInit(
   78.56+            '{url|urlescape}graph/%next%{graphvars%urlparameter}',
   78.57+            '{nextentry%"{node}"}', <!-- NEXTHASH
   78.58+            function (htmlText) \{
   78.59+                var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
   78.60+                return m ? m[1] : null;
   78.61+            },
   78.62+            '#wrapper',
   78.63+            '<div class="%class%" style="text-align: center;">%text%</div>',
   78.64+            'graph'
   78.65+    );
   78.66+    </script>
   78.67+
   78.68+{footer}
    79.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    79.2+++ b/templates/monoblue/graphentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
    79.3@@ -0,0 +1,9 @@
    79.4+<li class="parity{parity}" data-node="{node|short}">
    79.5+    <div class="fg">
    79.6+        <span class="desc">
    79.7+            <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>
    79.8+        </span>
    79.9+        {alltags}
   79.10+        <div class="info"><span class="age">{date|rfc822date}</span>, by {author|person}</div>
   79.11+    </div>
   79.12+</li>
    80.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    80.2+++ b/templates/monoblue/header.tmpl	Sat Jul 20 22:31:54 2024 -0400
    80.3@@ -0,0 +1,7 @@
    80.4+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    80.5+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    80.6+<head>
    80.7+    <link rel="icon" href="{staticurl|urlescape}hgicon.png" type="image/png" />
    80.8+    <meta name="robots" content="index, nofollow"/>
    80.9+    <link rel="stylesheet" href="{staticurl|urlescape}style-monoblue.css" type="text/css" />
   80.10+    <script type="text/javascript" src="{staticurl|urlescape}mercurial.js"></script>
    81.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    81.2+++ b/templates/monoblue/help.tmpl	Sat Jul 20 22:31:54 2024 -0400
    81.3@@ -0,0 +1,32 @@
    81.4+{header}
    81.5+    <title>Help: {topic}</title>
    81.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    81.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    81.8+</head>
    81.9+
   81.10+<body>
   81.11+<div id="container">
   81.12+    <div class="page-header">
   81.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / help</h1>
   81.14+
   81.15+        {searchform}
   81.16+
   81.17+        <ul class="page-nav">
   81.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   81.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   81.20+            <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
   81.21+            <li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   81.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   81.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   81.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   81.25+            <li><a href="{url|urlescape}file{sessionvars%urlparameter}">files</a></li>
   81.26+            <li class="current">help</li>
   81.27+        </ul>
   81.28+    </div>
   81.29+
   81.30+    <h2 class="no-link no-border">help</h2>
   81.31+    <div id="doc">
   81.32+    {rstdoc(doc, "html")}
   81.33+    </div>
   81.34+
   81.35+{footer}
    82.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    82.2+++ b/templates/monoblue/helptopics.tmpl	Sat Jul 20 22:31:54 2024 -0400
    82.3@@ -0,0 +1,46 @@
    82.4+{header}
    82.5+    <title>Help: {title}</title>
    82.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    82.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    82.8+</head>
    82.9+
   82.10+<body>
   82.11+<div id="container">
   82.12+    <div class="page-header">
   82.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / help</h1>
   82.14+
   82.15+        {searchform}
   82.16+
   82.17+        <ul class="page-nav">
   82.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   82.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   82.20+            <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
   82.21+            <li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   82.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   82.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   82.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   82.25+            <li><a href="{url|urlescape}file{sessionvars%urlparameter}">files</a></li>
   82.26+            {if(subindex,
   82.27+              '<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>',
   82.28+              '<li class="current">help</li>'
   82.29+            )}
   82.30+        </ul>
   82.31+    </div>
   82.32+
   82.33+    <h2 class="no-link no-border">help</h2>
   82.34+    <table cellspacing="0">
   82.35+    <tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
   82.36+    {topics % helpentry}
   82.37+
   82.38+    {if(earlycommands, '
   82.39+    <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
   82.40+    {earlycommands % helpentry}
   82.41+    ')}
   82.42+
   82.43+    {if(othercommands, '
   82.44+    <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
   82.45+    {othercommands % helpentry}
   82.46+    ')}
   82.47+    </table>
   82.48+
   82.49+{footer}
    83.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    83.2+++ b/templates/monoblue/index.tmpl	Sat Jul 20 22:31:54 2024 -0400
    83.3@@ -0,0 +1,34 @@
    83.4+{header}
    83.5+    <title>Mercurial repositories index</title>
    83.6+</head>
    83.7+
    83.8+<body>
    83.9+<div id="container">
   83.10+    <div class="page-header">
   83.11+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h1>
   83.12+        <ul class="page-nav">
   83.13+        </ul>
   83.14+    </div>
   83.15+
   83.16+    <table cellspacing="0">
   83.17+        <tr>
   83.18+            <td><a href="?sort={sort_name}">Name</a></td>
   83.19+            <td><a href="?sort={sort_description}">Description</a></td>
   83.20+            <td><a href="?sort={sort_contact}">Contact</a></td>
   83.21+            <td><a href="?sort={sort_lastchange}">Last modified</a></td>
   83.22+            <td>&nbsp;</td>
   83.23+            <td>&nbsp;</td>
   83.24+        </tr>
   83.25+        {entries%indexentry}
   83.26+    </table>
   83.27+    <div class="page-footer">
   83.28+        {motd}
   83.29+    </div>
   83.30+
   83.31+    <div id="powered-by">
   83.32+        <p><a href="{logourl}" title="Mercurial"><img src="{staticurl|urlescape}{logoimg}" width=75 height=90 border=0 alt="mercurial"></a></p>
   83.33+    </div>
   83.34+
   83.35+</div>
   83.36+</body>
   83.37+</html>
    84.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    84.2+++ b/templates/monoblue/manifest.tmpl	Sat Jul 20 22:31:54 2024 -0400
    84.3@@ -0,0 +1,41 @@
    84.4+{header}
    84.5+<title>{repo|escape}: files</title>
    84.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    84.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    84.8+</head>
    84.9+
   84.10+<body>
   84.11+<div id="container">
   84.12+    <div class="page-header">
   84.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / files</h1>
   84.14+
   84.15+        {searchform}
   84.16+
   84.17+        <ul class="page-nav">
   84.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   84.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   84.20+            <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
   84.21+            <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   84.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   84.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   84.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   84.25+            <li class="current">files</li>
   84.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   84.27+        </ul>
   84.28+    </div>
   84.29+
   84.30+    <ul class="submenu">
   84.31+        <li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
   84.32+        {archives%archiveentry}
   84.33+    </ul>
   84.34+
   84.35+    <h2 class="no-link no-border">files</h2>
   84.36+    <p class="files">{path|escape} {alltags}</p>
   84.37+
   84.38+    <table>
   84.39+        {ifeq(path, up, '', updirentry)}
   84.40+        {dentries%direntry}
   84.41+        {fentries%fileentry}
   84.42+    </table>
   84.43+
   84.44+{footer}
    85.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    85.2+++ b/templates/monoblue/map	Sat Jul 20 22:31:54 2024 -0400
    85.3@@ -0,0 +1,318 @@
    85.4+default = 'summary'
    85.5+mimetype = 'text/html; charset={encoding}'
    85.6+header = header.tmpl
    85.7+footer = footer.tmpl
    85.8+search = search.tmpl
    85.9+changelog = changelog.tmpl
   85.10+summary = summary.tmpl
   85.11+error = error.tmpl
   85.12+notfound = notfound.tmpl
   85.13+
   85.14+help = help.tmpl
   85.15+helptopics = helptopics.tmpl
   85.16+
   85.17+helpentry = '
   85.18+  <tr><td>
   85.19+    <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
   85.20+      {if(basename, '{basename|escape}', '{topic|escape}')}
   85.21+    </a>
   85.22+  </td><td>
   85.23+    {summary|escape}
   85.24+  </td></tr>'
   85.25+
   85.26+naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
   85.27+navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
   85.28+navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
   85.29+filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
   85.30+filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
   85.31+filenodelink = '
   85.32+  <tr class="parity{parity}">
   85.33+    <td><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
   85.34+    <td></td>
   85.35+    <td>
   85.36+      <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
   85.37+      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
   85.38+      <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
   85.39+      <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
   85.40+      <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
   85.41+    </td>
   85.42+  </tr>'
   85.43+filenolink = '
   85.44+  <tr class="parity{parity}">
   85.45+    <td><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
   85.46+    <td></td>
   85.47+    <td>
   85.48+      file |
   85.49+      annotate |
   85.50+      <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
   85.51+      <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
   85.52+      <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
   85.53+    </td>
   85.54+  </tr>'
   85.55+
   85.56+nav = '{before%naventry} {after%naventry}'
   85.57+navshort = '{before%navshortentry}{after%navshortentry}'
   85.58+navgraph = '{before%navgraphentry}{after%navgraphentry}'
   85.59+filenav = '{before%filenaventry}{after%filenaventry}'
   85.60+
   85.61+fileellipses = '...'
   85.62+changelogentry = changelogentry.tmpl
   85.63+changeset = changeset.tmpl
   85.64+manifest = manifest.tmpl
   85.65+updirentry = '
   85.66+  <tr class="parity{upparity}">
   85.67+    <td>drwxr-xr-x</td>
   85.68+    <td></td>
   85.69+    <td></td>
   85.70+    <td>
   85.71+      <a href="{url|urlescape}file/{symrev}{up|urlescape}{sessionvars%urlparameter}">[up]</a>
   85.72+    </td>
   85.73+    <td class="link">&nbsp;</td>
   85.74+  </tr>'
   85.75+direntry = '
   85.76+  <tr class="parity{parity}">
   85.77+    <td>drwxr-xr-x</td>
   85.78+    <td></td>
   85.79+    <td></td>
   85.80+    <td>
   85.81+      <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
   85.82+      <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
   85.83+    </td>
   85.84+    <td><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a></td>
   85.85+  </tr>'
   85.86+fileentry = '
   85.87+  <tr class="parity{parity}">
   85.88+    <td>{permissions|permissions}</td>
   85.89+    <td>{date|isodate}</td>
   85.90+    <td>{size}</td>
   85.91+    <td><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
   85.92+    <td>
   85.93+      <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
   85.94+      <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
   85.95+      <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
   85.96+    </td>
   85.97+  </tr>'
   85.98+filerevision = filerevision.tmpl
   85.99+fileannotate = fileannotate.tmpl
  85.100+filediff = filediff.tmpl
  85.101+filecomparison = filecomparison.tmpl
  85.102+filelog = filelog.tmpl
  85.103+fileline = '
  85.104+  <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
  85.105+annotateline = '
  85.106+  <tr id="{lineid}" class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
  85.107+    <td class="annotate linenr parity{blockparity}">
  85.108+      {if(blockhead,
  85.109+          '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
  85.110+             {rev}
  85.111+           </a>')}
  85.112+      <div class="annotate-info">
  85.113+        <div>
  85.114+          <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
  85.115+            {node|short}</a>
  85.116+          {desc|escape|firstline}
  85.117+        </div>
  85.118+        <div><em>{author|obfuscate}</em></div>
  85.119+        <div>parents: {parents%annotateparent}</div>
  85.120+        <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
  85.121+        <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
  85.122+      </div>
  85.123+    </td>
  85.124+    <td class="lineno">
  85.125+      <a href="#{lineid}">{linenumber}</a>
  85.126+    </td>
  85.127+    <td class="source">{line|escape}</td>
  85.128+  </tr>'
  85.129+annotateparent = '
  85.130+  <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
  85.131+difflineplus = '
  85.132+  <a href="#{lineid}"></a><span id="{lineid}" class="difflineplus">{strip(line|escape, '\r\n')}</span>'
  85.133+difflineminus = '
  85.134+  <a href="#{lineid}"></a><span id="{lineid}" class="difflineminus">{strip(line|escape, '\r\n')}</span>'
  85.135+difflineat = '
  85.136+  <a href="#{lineid}"></a><span id="{lineid}" class="difflineat">{strip(line|escape, '\r\n')}</span>'
  85.137+diffline = '
  85.138+  <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
  85.139+
  85.140+comparisonblock ='
  85.141+  <tbody class="block">
  85.142+  {lines}
  85.143+  </tbody>'
  85.144+comparisonline = '
  85.145+  <tr id="{lineid}">
  85.146+    <td class="source {type}"><a class="linenr" href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</td>
  85.147+    <td class="source {type}"><a class="linenr" href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</td>
  85.148+  </tr>'
  85.149+
  85.150+changesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
  85.151+changesetbranch = '<dt>branch</dt><dd>{name|escape}</dd>'
  85.152+changesetparent = '
  85.153+  <dt>parent {rev}</dt>
  85.154+  <dd>{changesetlink}</dd>'
  85.155+changesetparentdiff = '
  85.156+  <dt>parent {rev}</dt>
  85.157+  <dd>{changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}</dd>'
  85.158+difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
  85.159+filerevbranch = '<dt>branch</dt><dd>{name|escape}</dd>'
  85.160+filerevparent = '
  85.161+  <dt>parent {rev}</dt>
  85.162+  <dd>
  85.163+    <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
  85.164+      {rename%filerename}{node|short}
  85.165+    </a>
  85.166+  </dd>'
  85.167+filerename = '{file|escape}@'
  85.168+filelogrename = '| <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
  85.169+fileannotateparent = '
  85.170+  <dt>parent {rev}</dt>
  85.171+  <dd>
  85.172+    <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
  85.173+      {rename%filerename}{node|short}
  85.174+    </a>
  85.175+  </dd>'
  85.176+changesetchild = '
  85.177+  <dt>child {rev}</dt>
  85.178+  <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
  85.179+filerevchild = '
  85.180+  <dt>child {rev}</dt>
  85.181+  <dd>
  85.182+    <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
  85.183+  </dd>'
  85.184+fileannotatechild = '
  85.185+  <dt>child {rev}</dt>
  85.186+  <dd>
  85.187+    <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
  85.188+  </dd>'
  85.189+tags = tags.tmpl
  85.190+tagentry = '
  85.191+  <tr class="parity{parity}">
  85.192+    <td class="nowrap age">{date|rfc822date}</td>
  85.193+    <td><a href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}">{tag|escape}</a></td>
  85.194+    <td class="nowrap">
  85.195+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
  85.196+      <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
  85.197+      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
  85.198+    </td>
  85.199+  </tr>'
  85.200+bookmarks = bookmarks.tmpl
  85.201+bookmarkentry = '
  85.202+  <tr class="parity{parity}">
  85.203+    <td class="nowrap age">{date|rfc822date}</td>
  85.204+    <td><a href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}">{bookmark|escape}</a></td>
  85.205+    <td class="nowrap">
  85.206+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
  85.207+      <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
  85.208+      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
  85.209+    </td>
  85.210+  </tr>'
  85.211+branches = branches.tmpl
  85.212+branchentry = '
  85.213+  <tr class="parity{parity}">
  85.214+    <td class="nowrap age">{date|rfc822date}</td>
  85.215+    <td class="{status}"><a href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}">{branch|escape}</a></td>
  85.216+    <td class="nowrap">
  85.217+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
  85.218+      <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
  85.219+      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
  85.220+    </td>
  85.221+  </tr>'
  85.222+diffblock = '<div class="diffblock"><pre class="sourcelines">{lines}</pre></div>'
  85.223+filediffparent = '
  85.224+  <dt>parent {rev}</dt>
  85.225+  <dd><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
  85.226+filecompparent = '
  85.227+  <dt>parent {rev}</dt>
  85.228+  <dd><a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
  85.229+filediffchild = '
  85.230+  <dt>child {rev}</dt>
  85.231+  <dd><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
  85.232+filecompchild = '
  85.233+  <dt>child {rev}</dt>
  85.234+  <dd><a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
  85.235+shortlog = shortlog.tmpl
  85.236+phasetag = '{ifeq(phase, 'public', '', '<span class="phasetag" title="{phase|escape}">{phase|escape}</span> ')}'
  85.237+obsoletetag = '{if(obsolete, '<span class="obsoletetag" title="obsolete">obsolete</span> ')}'
  85.238+instabilitytag = '<span class="instabilitytag" title="{instability|escape}">{instability|escape}</span> '
  85.239+tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
  85.240+branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
  85.241+inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
  85.242+bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
  85.243+alltags = '<span class="logtags">{phasetag}{obsoletetag}{instabilities%instabilitytag}{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>'
  85.244+successorlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
  85.245+obsfatesuccessors = '{if(successors, ' as ')}{successors%successorlink}'
  85.246+obsfateverb = '{obsfateverb(successors, markers)}'
  85.247+obsfateoperations = '{if(obsfateoperations(markers), ' using {join(obsfateoperations(markers), ', ')}')}'
  85.248+obsfateusers = '{if(obsfateusers(markers), ' by {join(obsfateusers(markers)%'{user|obfuscate}', ', ')}')}'
  85.249+obsfatedate = '{if(obsfatedate(markers), ' {ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), '<span class="age">{min(obsfatedate(markers))|rfc822date}</span>', 'between <span class="age">{min(obsfatedate(markers))|rfc822date}</span> and <span class="age">{max(obsfatedate(markers))|rfc822date}</span>')}')}'
  85.250+obsfateentry = '
  85.251+  <dt>obsolete</dt>
  85.252+  <dd>{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}</dd>'
  85.253+instabilitychangesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
  85.254+divergentnode = '{instabilitychangesetlink} ({phase})'
  85.255+whyunstableentry = '
  85.256+  <dt>unstable</dt>
  85.257+  <dd>{instability}: {if(divergentnodes, divergentnodes%divergentnode)} {reason} {instabilitychangesetlink}</dd>'
  85.258+shortlogentry = '
  85.259+  <tr class="parity{parity}">
  85.260+    <td class="nowrap age">{date|rfc822date}</td>
  85.261+    <td>{author|person}</td>
  85.262+    <td>
  85.263+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
  85.264+        {desc|strip|firstline|escape|nonempty}
  85.265+        {alltags}
  85.266+      </a>
  85.267+    </td>
  85.268+    <td class="nowrap">
  85.269+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
  85.270+      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
  85.271+    </td>
  85.272+  </tr>'
  85.273+filelogentry = '
  85.274+  <tr class="parity{parity}">
  85.275+    <td class="nowrap age">{date|rfc822date}</td>
  85.276+    <td>{author|person}</td>
  85.277+    <td>
  85.278+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
  85.279+        {desc|strip|firstline|escape|nonempty}
  85.280+        {alltags}
  85.281+      </a>
  85.282+    </td>
  85.283+    <td class="nowrap">
  85.284+      <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
  85.285+      <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
  85.286+      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
  85.287+      {rename%filelogrename}
  85.288+    </td>
  85.289+  </tr>'
  85.290+archiveentry = '<li><a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a></li>'
  85.291+indexentry = '
  85.292+  <tr class="parity{parity}">
  85.293+    <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
  85.294+    <td>{description}</td>
  85.295+    <td>{contact|obfuscate}</td>
  85.296+    <td class="age">{lastchange|rfc822date}</td>
  85.297+    <td class="indexlinks">{archives%indexarchiveentry}</td>
  85.298+    <td>
  85.299+        {if(isdirectory, '',
  85.300+            '<div class="rss_logo">
  85.301+                <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
  85.302+            </div>'
  85.303+            )}
  85.304+    </td>
  85.305+  </tr>\n'
  85.306+indexarchiveentry = '<a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
  85.307+index = index.tmpl
  85.308+urlparameter = '{separator}{name}={value|urlescape}'
  85.309+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
  85.310+graph = graph.tmpl
  85.311+graphentry = graphentry.tmpl
  85.312+breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
  85.313+
  85.314+searchform = '
  85.315+  <form action="{url|urlescape}log">
  85.316+    {sessionvars%hiddenformentry}
  85.317+    <dl class="search">
  85.318+      <dt><label>Search: </label></dt>
  85.319+      <dd><input type="text" name="rev" value="{query|escape}" /></dd>
  85.320+    </dl>
  85.321+  </form>'
    86.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    86.2+++ b/templates/monoblue/notfound.tmpl	Sat Jul 20 22:31:54 2024 -0400
    86.3@@ -0,0 +1,32 @@
    86.4+{header}
    86.5+    <title>Mercurial repository not found</title>
    86.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    86.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    86.8+</head>
    86.9+
   86.10+<body>
   86.11+<div id="container">
   86.12+    <div class="page-header">
   86.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / not found: {repo|escape}</h1>
   86.14+
   86.15+        {searchform}
   86.16+
   86.17+        <ul class="page-nav">
   86.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   86.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   86.20+            <li><a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a></li>
   86.21+            <li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   86.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   86.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   86.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   86.25+            <li><a href="{url|urlescape}file{sessionvars%urlparameter}">files</a></li>
   86.26+            {archives%archiveentry}
   86.27+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   86.28+        </ul>
   86.29+    </div>
   86.30+
   86.31+    <h2 class="no-link no-border">Not Found</h2>
   86.32+    <p class="normal">The specified repository "{repo|escape}" is unknown, sorry.</p>
   86.33+    <p class="normal">Please go back to the <a href="{url|urlescape}">main repository list page</a>.</p>
   86.34+
   86.35+{footer}
    87.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    87.2+++ b/templates/monoblue/search.tmpl	Sat Jul 20 22:31:54 2024 -0400
    87.3@@ -0,0 +1,31 @@
    87.4+{header}
    87.5+    <title>{repo|escape}: Search</title>
    87.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    87.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    87.8+</head>
    87.9+
   87.10+<body>
   87.11+<div id="container">
   87.12+    <div class="page-header">
   87.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / search</h1>
   87.14+
   87.15+        {searchform}
   87.16+
   87.17+        <ul class="page-nav">
   87.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   87.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   87.20+            <li><a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a></li>
   87.21+            <li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   87.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   87.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   87.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   87.25+            <li><a href="{url|urlescape}file{sessionvars%urlparameter}">files</a></li>
   87.26+            {archives%archiveentry}
   87.27+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   87.28+        </ul>
   87.29+    </div>
   87.30+
   87.31+    <h2 class="no-link no-border">searching for {query|escape}</h2>
   87.32+    {entries%changelogentry}
   87.33+
   87.34+{footer}
    88.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    88.2+++ b/templates/monoblue/shortlog.tmpl	Sat Jul 20 22:31:54 2024 -0400
    88.3@@ -0,0 +1,53 @@
    88.4+{header}
    88.5+    <title>{repo|escape}: shortlog</title>
    88.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    88.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    88.8+</head>
    88.9+
   88.10+<body>
   88.11+<div id="container">
   88.12+    <div class="page-header">
   88.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / shortlog</h1>
   88.14+
   88.15+        {searchform}
   88.16+
   88.17+        <ul class="page-nav">
   88.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   88.19+            <li class="current">shortlog</li>
   88.20+            <li><a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a></li>
   88.21+            <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   88.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   88.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   88.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   88.25+            <li><a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a></li>
   88.26+            {archives%archiveentry}
   88.27+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   88.28+        </ul>
   88.29+    </div>
   88.30+
   88.31+    <h2 class="no-link no-border">shortlog</h2>
   88.32+
   88.33+    <table class="shortlogtable">
   88.34+{entries%shortlogentry}
   88.35+    </table>
   88.36+
   88.37+    <div class="page-path">
   88.38+    {changenav%navshort}
   88.39+    </div>
   88.40+
   88.41+    <script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
   88.42+    ajaxScrollInit(
   88.43+            '{url|urlescape}shortlog/%next%{sessionvars%urlparameter}',
   88.44+            '{nextentry%"{node}"}', <!-- NEXTHASH
   88.45+            function (htmlText) \{
   88.46+                var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
   88.47+                return m ? m[1] : null;
   88.48+            },
   88.49+            '.shortlogtable > tbody:nth-of-type(1)',
   88.50+            '<tr class="%class%">\
   88.51+            <td colspan="4" style="text-align: center;">%text%</td>\
   88.52+            </tr>'
   88.53+    );
   88.54+    </script>
   88.55+
   88.56+{footer}
    89.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    89.2+++ b/templates/monoblue/summary.tmpl	Sat Jul 20 22:31:54 2024 -0400
    89.3@@ -0,0 +1,71 @@
    89.4+{header}
    89.5+    <title>{repo|escape}: Summary</title>
    89.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}"/>
    89.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}"/>
    89.8+</head>
    89.9+
   89.10+<body>
   89.11+<div id="container">
   89.12+    <div class="page-header">
   89.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / summary</h1>
   89.14+
   89.15+        {searchform}
   89.16+
   89.17+        <ul class="page-nav">
   89.18+            <li class="current">summary</li>
   89.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   89.20+            <li><a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a></li>
   89.21+            <li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   89.22+            <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   89.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   89.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   89.25+            <li><a href="{url|urlescape}file{sessionvars%urlparameter}">files</a></li>
   89.26+            {archives%archiveentry}
   89.27+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   89.28+        </ul>
   89.29+    </div>
   89.30+
   89.31+    <h2 class="no-link no-border">Mercurial Repository Overview</h2>
   89.32+    <dl class="overview">
   89.33+        <dt>name</dt>
   89.34+        <dd>{repo|escape}</dd>
   89.35+        <dt>description</dt>
   89.36+        <dd>{desc}</dd>
   89.37+        <dt>owner</dt>
   89.38+        <dd>{owner|obfuscate}</dd>
   89.39+        <dt>last change</dt>
   89.40+        <dd class="date age">{lastchange|rfc822date}</dd>
   89.41+    </dl>
   89.42+
   89.43+    <h2><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">Changes</a></h2>
   89.44+    <table>
   89.45+{shortlog%shortlogentry}
   89.46+        <tr class="light">
   89.47+            <td colspan="4"><a class="list" href="{url|urlescape}shortlog{sessionvars%urlparameter}">...</a></td>
   89.48+        </tr>
   89.49+    </table>
   89.50+
   89.51+    <h2><a href="{url|urlescape}tags{sessionvars%urlparameter}">Tags</a></h2>
   89.52+    <table>
   89.53+{tags%tagentry}
   89.54+        <tr class="light">
   89.55+            <td colspan="3"><a class="list" href="{url|urlescape}tags{sessionvars%urlparameter}">...</a></td>
   89.56+        </tr>
   89.57+    </table>
   89.58+
   89.59+    <h2><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">Bookmarks</a></h2>
   89.60+    <table>
   89.61+    {bookmarks%bookmarkentry}
   89.62+        <tr class="light">
   89.63+            <td colspan="3"><a class="list" href="{url|urlescape}bookmarks{sessionvars%urlparameter}">...</a></td>
   89.64+        </tr>
   89.65+    </table>
   89.66+
   89.67+    <h2><a href="{url|urlescape}branches{sessionvars%urlparameter}">Branches</a></h2>
   89.68+    <table>
   89.69+    {branches%branchentry}
   89.70+        <tr class="light">
   89.71+          <td colspan="3"><a class="list" href="{url|urlescape}branches{sessionvars%urlparameter}">...</a></td>
   89.72+        </tr>
   89.73+    </table>
   89.74+{footer}
    90.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    90.2+++ b/templates/monoblue/tags.tmpl	Sat Jul 20 22:31:54 2024 -0400
    90.3@@ -0,0 +1,32 @@
    90.4+{header}
    90.5+    <title>{repo|escape}: Tags</title>
    90.6+    <link rel="alternate" type="application/atom+xml" href="{url|urlescape}atom-tags" title="Atom feed for {repo|escape}: tags"/>
    90.7+    <link rel="alternate" type="application/rss+xml" href="{url|urlescape}rss-tags" title="RSS feed for {repo|escape}: tags"/>
    90.8+</head>
    90.9+
   90.10+<body>
   90.11+<div id="container">
   90.12+    <div class="page-header">
   90.13+        <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb} / tags</h1>
   90.14+
   90.15+        {searchform}
   90.16+
   90.17+        <ul class="page-nav">
   90.18+            <li><a href="{url|urlescape}summary{sessionvars%urlparameter}">summary</a></li>
   90.19+            <li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a></li>
   90.20+            <li><a href="{url|urlescape}changelog{sessionvars%urlparameter}">changelog</a></li>
   90.21+            <li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   90.22+            <li class="current">tags</li>
   90.23+            <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   90.24+            <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   90.25+            <li><a href="{url|urlescape}file{sessionvars%urlparameter}">files</a></li>
   90.26+            <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   90.27+        </ul>
   90.28+    </div>
   90.29+
   90.30+    <h2 class="no-link no-border">tags</h2>
   90.31+    <table cellspacing="0">
   90.32+{entries%tagentry}
   90.33+    </table>
   90.34+
   90.35+{footer}
    92.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    92.2+++ b/templates/paper/bookmarks.tmpl	Sat Jul 20 22:31:54 2024 -0400
    92.3@@ -0,0 +1,53 @@
    92.4+{header}
    92.5+<title>{repo|escape}: bookmarks</title>
    92.6+<link rel="alternate" type="application/atom+xml"
    92.7+   href="{url|urlescape}atom-bookmarks" title="Atom feed for {repo|escape}: bookmarks" />
    92.8+<link rel="alternate" type="application/rss+xml"
    92.9+   href="{url|urlescape}rss-bookmarks" title="RSS feed for {repo|escape}: bookmarks" />
   92.10+</head>
   92.11+<body>
   92.12+
   92.13+<div class="container">
   92.14+<div class="menu">
   92.15+<div class="logo">
   92.16+<a href="{logourl}">
   92.17+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
   92.18+</div>
   92.19+<ul>
   92.20+<li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">log</a></li>
   92.21+<li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   92.22+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   92.23+<li class="active">bookmarks</li>
   92.24+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   92.25+</ul>
   92.26+<ul>
   92.27+<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   92.28+</ul>
   92.29+<div class="atom-logo">
   92.30+<a href="{url|urlescape}atom-bookmarks" title="subscribe to atom feed">
   92.31+<img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="atom feed" />
   92.32+</a>
   92.33+</div>
   92.34+</div>
   92.35+
   92.36+<div class="main">
   92.37+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
   92.38+<h3>bookmarks</h3>
   92.39+
   92.40+{searchform}
   92.41+
   92.42+<table class="bigtable">
   92.43+<thead>
   92.44+<tr>
   92.45+ <th>bookmark</th>
   92.46+ <th>node</th>
   92.47+</tr>
   92.48+</thead>
   92.49+<tbody class="stripes2">
   92.50+{entries%bookmarkentry}
   92.51+</tbody>
   92.52+</table>
   92.53+</div>
   92.54+</div>
   92.55+
   92.56+{footer}
    93.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    93.2+++ b/templates/paper/branches.tmpl	Sat Jul 20 22:31:54 2024 -0400
    93.3@@ -0,0 +1,53 @@
    93.4+{header}
    93.5+<title>{repo|escape}: branches</title>
    93.6+<link rel="alternate" type="application/atom+xml"
    93.7+   href="{url|urlescape}atom-branches" title="Atom feed for {repo|escape}: branches" />
    93.8+<link rel="alternate" type="application/rss+xml"
    93.9+   href="{url|urlescape}rss-branches" title="RSS feed for {repo|escape}: branches" />
   93.10+</head>
   93.11+<body>
   93.12+
   93.13+<div class="container">
   93.14+<div class="menu">
   93.15+<div class="logo">
   93.16+<a href="{logourl}">
   93.17+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
   93.18+</div>
   93.19+<ul>
   93.20+<li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">log</a></li>
   93.21+<li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   93.22+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   93.23+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   93.24+<li class="active">branches</li>
   93.25+</ul>
   93.26+<ul>
   93.27+ <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   93.28+</ul>
   93.29+<div class="atom-logo">
   93.30+<a href="{url|urlescape}atom-branches" title="subscribe to atom feed">
   93.31+<img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="atom feed" />
   93.32+</a>
   93.33+</div>
   93.34+</div>
   93.35+
   93.36+<div class="main">
   93.37+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
   93.38+<h3>branches</h3>
   93.39+
   93.40+{searchform}
   93.41+
   93.42+<table class="bigtable">
   93.43+<thead>
   93.44+<tr>
   93.45+ <th>branch</th>
   93.46+ <th>node</th>
   93.47+</tr>
   93.48+</thead>
   93.49+<tbody class="stripes2">
   93.50+{entries % branchentry}
   93.51+</tbody>
   93.52+</table>
   93.53+</div>
   93.54+</div>
   93.55+
   93.56+{footer}
    94.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    94.2+++ b/templates/paper/changeset.tmpl	Sat Jul 20 22:31:54 2024 -0400
    94.3@@ -0,0 +1,95 @@
    94.4+{header}
    94.5+<title>{repo|escape}: {node|short}</title>
    94.6+</head>
    94.7+<body>
    94.8+<div class="container">
    94.9+<div class="menu">
   94.10+<div class="logo">
   94.11+<a href="{logourl}">
   94.12+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
   94.13+</div>
   94.14+<ul>
   94.15+ <li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
   94.16+ <li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   94.17+ <li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   94.18+ <li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   94.19+ <li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   94.20+</ul>
   94.21+<ul>
   94.22+ <li class="active">changeset</li>
   94.23+ <li><a href="{url|urlescape}raw-rev/{symrev}{sessionvars%urlparameter}">raw</a></li>
   94.24+ <li><a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">browse</a></li>
   94.25+</ul>
   94.26+<ul>
   94.27+ {archives%archiveentry}
   94.28+</ul>
   94.29+<ul>
   94.30+ <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   94.31+</ul>
   94.32+</div>
   94.33+
   94.34+<div class="main">
   94.35+
   94.36+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
   94.37+<h3>
   94.38+ changeset {rev}:<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
   94.39+ {alltags}
   94.40+</h3>
   94.41+
   94.42+{searchform}
   94.43+
   94.44+<div class="description">{desc|strip|escape|websub|nonempty}</div>
   94.45+
   94.46+<table id="changesetEntry">
   94.47+<tr>
   94.48+ <th class="author">author</th>
   94.49+ <td class="author">{author|obfuscate}</td>
   94.50+</tr>
   94.51+<tr>
   94.52+ <th class="date">date</th>
   94.53+ <td class="date age">{date|rfc822date}</td>
   94.54+</tr>
   94.55+{if(obsolete, '<tr>
   94.56+ <th>obsolete</th>
   94.57+ <td>{join(succsandmarkers%obsfateentry, '<br>\n')}</td>
   94.58+</tr>')}
   94.59+{if(instabilities, '<tr>
   94.60+ <th>unstable</th>
   94.61+ <td>{join(whyunstable%whyunstableentry, '<br>\n')}</td>
   94.62+</tr>')}
   94.63+<tr>
   94.64+ <th class="author">parents</th>
   94.65+ <td class="author">{ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}</td>
   94.66+</tr>
   94.67+<tr>
   94.68+ <th class="author">children</th>
   94.69+ <td class="author">{child%changesetchild}</td>
   94.70+</tr>
   94.71+<tr>
   94.72+ <th class="files">files</th>
   94.73+ <td class="files">{files}</td>
   94.74+</tr>
   94.75+<tr>
   94.76+  <th class="diffstat">diffstat</th>
   94.77+  <td class="diffstat">
   94.78+    {diffsummary}
   94.79+    <a id="diffstatexpand" class="diffstattoggle" href="#">[<tt>+</tt>]</a>
   94.80+    <div id="diffstatdetails" style="display:none;">
   94.81+      <a class="diffstattoggle" href="#">[<tt>-</tt>]</a>
   94.82+      <table class="diffstat-table stripes2">{diffstat}</table>
   94.83+    </div>
   94.84+  </td>
   94.85+</tr>
   94.86+</table>
   94.87+
   94.88+<div class="overflow">
   94.89+<div class="sourcefirst linewraptoggle">line wrap: <a class="linewraplink" href="#">on</a></div>
   94.90+<div class="sourcefirst"> line diff</div>
   94.91+<div class="stripes2 diffblocks">
   94.92+{diff}
   94.93+</div>
   94.94+</div>
   94.95+
   94.96+</div>
   94.97+</div>
   94.98+{footer}
    95.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    95.2+++ b/templates/paper/diffstat.tmpl	Sat Jul 20 22:31:54 2024 -0400
    95.3@@ -0,0 +1,8 @@
    95.4+  <tr>
    95.5+    <td class="diffstat-file"><a href="#l{fileno}.1">{file|escape}</a></td>
    95.6+    <td class="diffstat-total" align="right">{total}</td>
    95.7+    <td class="diffstat-graph">
    95.8+      <span class="diffstat-add" style="width:{addpct}%;">&nbsp;</span>
    95.9+      <span class="diffstat-remove" style="width:{removepct}%;">&nbsp;</span>
   95.10+    </td>
   95.11+  </tr>
    96.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    96.2+++ b/templates/paper/error.tmpl	Sat Jul 20 22:31:54 2024 -0400
    96.3@@ -0,0 +1,42 @@
    96.4+{header}
    96.5+<title>{repo|escape}: error</title>
    96.6+</head>
    96.7+<body>
    96.8+
    96.9+<div class="container">
   96.10+<div class="menu">
   96.11+<div class="logo">
   96.12+<a href="{logourl}">
   96.13+<img src="{staticurl|urlescape}{logoimg}" width=75 height=90 border=0 alt="mercurial" /></a>
   96.14+</div>
   96.15+<ul>
   96.16+<li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">log</a></li>
   96.17+<li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
   96.18+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   96.19+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   96.20+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   96.21+</ul>
   96.22+<ul>
   96.23+<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   96.24+</ul>
   96.25+</div>
   96.26+
   96.27+<div class="main">
   96.28+
   96.29+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
   96.30+<h3>error</h3>
   96.31+
   96.32+{searchform}
   96.33+
   96.34+<div class="description">
   96.35+<p>
   96.36+An error occurred while processing your request:
   96.37+</p>
   96.38+<p>
   96.39+{error|escape}
   96.40+</p>
   96.41+</div>
   96.42+</div>
   96.43+</div>
   96.44+
   96.45+{footer}
    97.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    97.2+++ b/templates/paper/fileannotate.tmpl	Sat Jul 20 22:31:54 2024 -0400
    97.3@@ -0,0 +1,95 @@
    97.4+{header}
    97.5+<title>{repo|escape}: {file|escape} annotate</title>
    97.6+</head>
    97.7+<body>
    97.8+
    97.9+<div class="container">
   97.10+<div class="menu">
   97.11+<div class="logo">
   97.12+<a href="{logourl}">
   97.13+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
   97.14+</div>
   97.15+<ul>
   97.16+<li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
   97.17+<li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   97.18+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   97.19+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   97.20+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   97.21+</ul>
   97.22+
   97.23+<ul>
   97.24+<li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
   97.25+<li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
   97.26+</ul>
   97.27+<ul>
   97.28+<li><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
   97.29+<li><a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
   97.30+<li><a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
   97.31+<li><a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a></li>
   97.32+<li class="active">annotate</li>
   97.33+<li><a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
   97.34+<li><a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a></li>
   97.35+</ul>
   97.36+<ul>
   97.37+<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   97.38+</ul>
   97.39+</div>
   97.40+
   97.41+<div class="main">
   97.42+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
   97.43+<h3>
   97.44+ annotate {file|escape} @ {rev}:<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
   97.45+ {alltags}
   97.46+</h3>
   97.47+
   97.48+{searchform}
   97.49+
   97.50+<div class="description">{desc|strip|escape|websub|nonempty}</div>
   97.51+
   97.52+<table id="changesetEntry">
   97.53+<tr>
   97.54+ <th class="author">author</th>
   97.55+ <td class="author">{author|obfuscate}</td>
   97.56+</tr>
   97.57+<tr>
   97.58+ <th class="date">date</th>
   97.59+ <td class="date age">{date|rfc822date}</td>
   97.60+</tr>
   97.61+<tr>
   97.62+ <th class="author">parents</th>
   97.63+ <td class="author">{parent%filerevparent}</td>
   97.64+</tr>
   97.65+<tr>
   97.66+ <th class="author">children</th>
   97.67+ <td class="author">{child%filerevchild}</td>
   97.68+</tr>
   97.69+</table>
   97.70+
   97.71+{diffoptsform}
   97.72+
   97.73+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
   97.74+    renderDiffOptsForm();
   97.75+</script>
   97.76+
   97.77+<div class="overflow">
   97.78+<table class="bigtable">
   97.79+<thead>
   97.80+<tr>
   97.81+ <th class="annotate">rev</th>
   97.82+ <th class="line">&nbsp;&nbsp;line source</th>
   97.83+</tr>
   97.84+</thead>
   97.85+<tbody class="stripes2 sourcelines"
   97.86+       data-logurl="{url|urlescape}log/{symrev}/{file|urlescape}"
   97.87+       data-selectabletag="TR"
   97.88+       data-ishead="{ishead}">
   97.89+  {annotate%annotateline}
   97.90+</tbody>
   97.91+</table>
   97.92+</div>
   97.93+</div>
   97.94+</div>
   97.95+
   97.96+<script type="text/javascript" src="{staticurl|urlescape}followlines.js"></script>
   97.97+
   97.98+{footer}
    98.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    98.2+++ b/templates/paper/filecomparison.tmpl	Sat Jul 20 22:31:54 2024 -0400
    98.3@@ -0,0 +1,90 @@
    98.4+{header}
    98.5+<title>{repo|escape}: {file|escape} comparison</title>
    98.6+</head>
    98.7+<body>
    98.8+
    98.9+<div class="container">
   98.10+<div class="menu">
   98.11+<div class="logo">
   98.12+<a href="{logourl}">
   98.13+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
   98.14+</div>
   98.15+<ul>
   98.16+<li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
   98.17+<li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   98.18+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   98.19+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   98.20+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   98.21+</ul>
   98.22+<ul>
   98.23+<li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
   98.24+<li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
   98.25+</ul>
   98.26+<ul>
   98.27+<li><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
   98.28+<li><a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
   98.29+<li><a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
   98.30+<li class="active">comparison</li>
   98.31+<li><a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
   98.32+<li><a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
   98.33+<li><a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a></li>
   98.34+</ul>
   98.35+<ul>
   98.36+<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   98.37+</ul>
   98.38+</div>
   98.39+
   98.40+<div class="main">
   98.41+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
   98.42+<h3>
   98.43+ comparison {file|escape} @ {rev}:<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
   98.44+ {alltags}
   98.45+</h3>
   98.46+
   98.47+{searchform}
   98.48+
   98.49+<div class="description">{desc|strip|escape|websub|nonempty}</div>
   98.50+
   98.51+<table id="changesetEntry">
   98.52+<tr>
   98.53+ <th>author</th>
   98.54+ <td>{author|obfuscate}</td>
   98.55+</tr>
   98.56+<tr>
   98.57+ <th>date</th>
   98.58+ <td class="date age">{date|rfc822date}</td>
   98.59+</tr>
   98.60+<tr>
   98.61+ <th>parents</th>
   98.62+ <td>{parent%filerevparent}</td>
   98.63+</tr>
   98.64+<tr>
   98.65+ <th>children</th>
   98.66+ <td>{child%filerevchild}</td>
   98.67+</tr>
   98.68+</table>
   98.69+
   98.70+<div class="overflow">
   98.71+<div class="sourcefirst">   comparison</div>
   98.72+<div class="legend">
   98.73+  <span class="legendinfo equal">equal</span>
   98.74+  <span class="legendinfo delete">deleted</span>
   98.75+  <span class="legendinfo insert">inserted</span>
   98.76+  <span class="legendinfo replace">replaced</span>
   98.77+</div>
   98.78+
   98.79+<table class="bigtable">
   98.80+  <thead class="header">
   98.81+    <tr>
   98.82+      <th>{leftrev}:{leftnode|short}</th>
   98.83+      <th>{rightrev}:{rightnode|short}</th>
   98.84+    </tr>
   98.85+  </thead>
   98.86+  {comparison}
   98.87+</table>
   98.88+
   98.89+</div>
   98.90+</div>
   98.91+</div>
   98.92+
   98.93+{footer}
    99.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    99.2+++ b/templates/paper/filediff.tmpl	Sat Jul 20 22:31:54 2024 -0400
    99.3@@ -0,0 +1,77 @@
    99.4+{header}
    99.5+<title>{repo|escape}: {file|escape} diff</title>
    99.6+</head>
    99.7+<body>
    99.8+
    99.9+<div class="container">
   99.10+<div class="menu">
   99.11+<div class="logo">
   99.12+<a href="{logourl}">
   99.13+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
   99.14+</div>
   99.15+<ul>
   99.16+<li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
   99.17+<li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
   99.18+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
   99.19+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
   99.20+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
   99.21+</ul>
   99.22+<ul>
   99.23+<li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
   99.24+<li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
   99.25+</ul>
   99.26+<ul>
   99.27+<li><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
   99.28+<li><a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
   99.29+<li class="active">diff</li>
   99.30+<li><a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a></li>
   99.31+<li><a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
   99.32+<li><a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
   99.33+<li><a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a></li>
   99.34+</ul>
   99.35+<ul>
   99.36+<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
   99.37+</ul>
   99.38+</div>
   99.39+
   99.40+<div class="main">
   99.41+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
   99.42+<h3>
   99.43+ diff {file|escape} @ {rev}:<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
   99.44+ {alltags}
   99.45+</h3>
   99.46+
   99.47+{searchform}
   99.48+
   99.49+<div class="description">{desc|strip|escape|websub|nonempty}</div>
   99.50+
   99.51+<table id="changesetEntry">
   99.52+<tr>
   99.53+ <th>author</th>
   99.54+ <td>{author|obfuscate}</td>
   99.55+</tr>
   99.56+<tr>
   99.57+ <th>date</th>
   99.58+ <td class="date age">{date|rfc822date}</td>
   99.59+</tr>
   99.60+<tr>
   99.61+ <th>parents</th>
   99.62+ <td>{parent%filerevparent}</td>
   99.63+</tr>
   99.64+<tr>
   99.65+ <th>children</th>
   99.66+ <td>{child%filerevchild}</td>
   99.67+</tr>
   99.68+</table>
   99.69+
   99.70+<div class="overflow">
   99.71+<div class="sourcefirst linewraptoggle">line wrap: <a class="linewraplink" href="#">on</a></div>
   99.72+<div class="sourcefirst"> line diff</div>
   99.73+<div class="stripes2 diffblocks">
   99.74+{diff}
   99.75+</div>
   99.76+</div>
   99.77+</div>
   99.78+</div>
   99.79+
   99.80+{footer}
   100.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   100.2+++ b/templates/paper/filelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
   100.3@@ -0,0 +1,83 @@
   100.4+{header}
   100.5+<title>{repo|escape}: {file|escape} history</title>
   100.6+<link rel="alternate" type="application/atom+xml"
   100.7+   href="{url|urlescape}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}" />
   100.8+<link rel="alternate" type="application/rss+xml"
   100.9+   href="{url|urlescape}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}" />
  100.10+</head>
  100.11+<body>
  100.12+
  100.13+<div class="container">
  100.14+<div class="menu">
  100.15+<div class="logo">
  100.16+<a href="{logourl}">
  100.17+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
  100.18+</div>
  100.19+<ul>
  100.20+<li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
  100.21+<li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
  100.22+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
  100.23+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  100.24+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
  100.25+</ul>
  100.26+<ul>
  100.27+<li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
  100.28+<li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
  100.29+</ul>
  100.30+<ul>
  100.31+<li><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
  100.32+<li><a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
  100.33+<li><a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a></li>
  100.34+<li><a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
  100.35+<li class="active">file log</li>
  100.36+<li><a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a></li>
  100.37+</ul>
  100.38+<ul>
  100.39+<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
  100.40+</ul>
  100.41+<div class="atom-logo">
  100.42+<a href="{url|urlescape}atom-log/tip/{file|urlescape}" title="subscribe to atom feed">
  100.43+<img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="atom feed" />
  100.44+</a>
  100.45+</div>
  100.46+</div>
  100.47+
  100.48+<div class="main">
  100.49+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  100.50+<h3>
  100.51+ log {file|escape} @ {rev}:<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
  100.52+ {alltags}
  100.53+ {if(linerange,
  100.54+' (following lines {linerange}{if(descend, ', descending')} <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">all revisions for this file</a>)')}
  100.55+</h3>
  100.56+
  100.57+{searchform}
  100.58+
  100.59+<div class="navigate">
  100.60+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{lessvars%urlparameter}">less</a>
  100.61+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{morevars%urlparameter}">more</a>
  100.62+| {nav%filenav}</div>
  100.63+
  100.64+<table class="bigtable">
  100.65+<thead>
  100.66+ <tr>
  100.67+  <th class="age">age</th>
  100.68+  <th class="author">author</th>
  100.69+  <th class="description">description</th>
  100.70+ </tr>
  100.71+</thead>
  100.72+<tbody class="stripes2">
  100.73+{entries%filelogentry}
  100.74+</tbody>
  100.75+</table>
  100.76+
  100.77+<div class="navigate">
  100.78+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{lessvars%urlparameter}">less</a>
  100.79+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{morevars%urlparameter}">more</a>
  100.80+| {nav%filenav}
  100.81+</div>
  100.82+
  100.83+</div>
  100.84+</div>
  100.85+
  100.86+{footer}
   101.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   101.2+++ b/templates/paper/filelogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   101.3@@ -0,0 +1,9 @@
   101.4+ <tr>
   101.5+  <td class="age">{date|rfc822date}</td>
   101.6+  <td class="author">{author|person}</td>
   101.7+  <td class="description">
   101.8+   <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>
   101.9+   {alltags}{rename%filelogrename}
  101.10+  </td>
  101.11+ </tr>
  101.12+ {if(patch, '<tr><td colspan="3">{diff}</td></tr>')}
   102.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   102.2+++ b/templates/paper/filerevision.tmpl	Sat Jul 20 22:31:54 2024 -0400
   102.3@@ -0,0 +1,83 @@
   102.4+{header}
   102.5+<title>{repo|escape}: {node|short} {file|escape}</title>
   102.6+</head>
   102.7+<body>
   102.8+
   102.9+<div class="container">
  102.10+<div class="menu">
  102.11+<div class="logo">
  102.12+<a href="{logourl}">
  102.13+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
  102.14+</div>
  102.15+<ul>
  102.16+<li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
  102.17+<li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
  102.18+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
  102.19+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  102.20+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
  102.21+</ul>
  102.22+<ul>
  102.23+<li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
  102.24+<li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
  102.25+</ul>
  102.26+<ul>
  102.27+<li class="active">file</li>
  102.28+<li><a href="{url|urlescape}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
  102.29+<li><a href="{url|urlescape}diff/{symrev}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
  102.30+<li><a href="{url|urlescape}comparison/{symrev}/{file|urlescape}{sessionvars%urlparameter}">comparison</a></li>
  102.31+<li><a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
  102.32+<li><a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
  102.33+<li><a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a></li>
  102.34+</ul>
  102.35+<ul>
  102.36+<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
  102.37+</ul>
  102.38+</div>
  102.39+
  102.40+<div class="main">
  102.41+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  102.42+<h3>
  102.43+ view {file|escape} @ {rev}:<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
  102.44+ {alltags}
  102.45+</h3>
  102.46+
  102.47+{searchform}
  102.48+
  102.49+<div class="description">{desc|strip|escape|websub|nonempty}</div>
  102.50+
  102.51+<table id="changesetEntry">
  102.52+<tr>
  102.53+ <th class="author">author</th>
  102.54+ <td class="author">{author|obfuscate}</td>
  102.55+</tr>
  102.56+<tr>
  102.57+ <th class="date">date</th>
  102.58+ <td class="date age">{date|rfc822date}</td>
  102.59+</tr>
  102.60+<tr>
  102.61+ <th class="author">parents</th>
  102.62+ <td class="author">{parent%filerevparent}</td>
  102.63+</tr>
  102.64+<tr>
  102.65+ <th class="author">children</th>
  102.66+ <td class="author">{child%filerevchild}</td>
  102.67+</tr>
  102.68+</table>
  102.69+
  102.70+<div class="overflow">
  102.71+<div class="sourcefirst linewraptoggle">line wrap: <a class="linewraplink" href="#">on</a></div>
  102.72+<div class="sourcefirst"> line source</div>
  102.73+<pre class="sourcelines stripes4 wrap bottomline"
  102.74+     data-logurl="{url|urlescape}log/{symrev}/{file|urlescape}"
  102.75+     data-selectabletag="SPAN"
  102.76+     data-ishead="{ishead}">
  102.77+{text%fileline}
  102.78+</pre>
  102.79+</div>
  102.80+
  102.81+<script type="text/javascript" src="{staticurl|urlescape}followlines.js"></script>
  102.82+
  102.83+</div>
  102.84+</div>
  102.85+
  102.86+{footer}
   103.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   103.2+++ b/templates/paper/footer.tmpl	Sat Jul 20 22:31:54 2024 -0400
   103.3@@ -0,0 +1,4 @@
   103.4+{motd}
   103.5+
   103.6+</body>
   103.7+</html>
   104.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   104.2+++ b/templates/paper/graph.tmpl	Sat Jul 20 22:31:54 2024 -0400
   104.3@@ -0,0 +1,89 @@
   104.4+{header}
   104.5+<title>{repo|escape}: revision graph</title>
   104.6+<link rel="alternate" type="application/atom+xml"
   104.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}: log" />
   104.8+<link rel="alternate" type="application/rss+xml"
   104.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}: log" />
  104.10+</head>
  104.11+<body>
  104.12+
  104.13+<div class="container">
  104.14+<div class="menu">
  104.15+<div class="logo">
  104.16+<a href="{logourl}">
  104.17+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
  104.18+</div>
  104.19+<ul>
  104.20+<li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
  104.21+<li class="active">graph</li>
  104.22+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
  104.23+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  104.24+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
  104.25+</ul>
  104.26+<ul>
  104.27+<li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
  104.28+<li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
  104.29+</ul>
  104.30+<ul>
  104.31+{archives%archiveentry}
  104.32+</ul>
  104.33+<ul>
  104.34+ <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
  104.35+</ul>
  104.36+<div class="atom-logo">
  104.37+<a href="{url|urlescape}atom-log" title="subscribe to atom feed">
  104.38+<img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="atom feed" />
  104.39+</a>
  104.40+</div>
  104.41+</div>
  104.42+
  104.43+<div class="main">
  104.44+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  104.45+<h3>graph</h3>
  104.46+
  104.47+{searchform}
  104.48+
  104.49+<div class="navigate">
  104.50+<a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
  104.51+<a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
  104.52+| rev {rev}: {changenav%navgraph}
  104.53+</div>
  104.54+
  104.55+<noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
  104.56+
  104.57+<div id="wrapper">
  104.58+<canvas id="graph"></canvas>
  104.59+<ul id="graphnodes" class="stripes2">{nodes%graphentry}</ul>
  104.60+</div>
  104.61+
  104.62+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
  104.63+var data = {jsdata|json};
  104.64+var graph = new Graph();
  104.65+graph.scale({bg_height});
  104.66+graph.render(data);
  104.67+</script>
  104.68+
  104.69+<div class="navigate">
  104.70+<a href="{url|urlescape}graph/{symrev}{lessvars%urlparameter}">less</a>
  104.71+<a href="{url|urlescape}graph/{symrev}{morevars%urlparameter}">more</a>
  104.72+| rev {rev}: {changenav%navgraph}
  104.73+</div>
  104.74+
  104.75+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
  104.76+    ajaxScrollInit(
  104.77+            '{url|urlescape}graph/%next%{graphvars%urlparameter}',
  104.78+            '{nextentry%"{node}"}', <!-- NEXTHASH
  104.79+            function (htmlText) \{
  104.80+                var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
  104.81+                return m ? m[1] : null;
  104.82+            },
  104.83+            '#wrapper',
  104.84+            '<div class="%class%" style="text-align: center;">%text%</div>',
  104.85+            'graph'
  104.86+    );
  104.87+</script>
  104.88+
  104.89+</div>
  104.90+</div>
  104.91+
  104.92+{footer}
   105.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   105.2+++ b/templates/paper/graphentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   105.3@@ -0,0 +1,9 @@
   105.4+<li data-node="{node|short}">
   105.5+ <div class="fg">
   105.6+  <span class="desc">
   105.7+   <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>
   105.8+  </span>
   105.9+  {alltags}
  105.10+  <div class="info"><span class="age">{date|rfc822date}</span>, by {author|person}</div>
  105.11+ </div>
  105.12+</li>
   106.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   106.2+++ b/templates/paper/header.tmpl	Sat Jul 20 22:31:54 2024 -0400
   106.3@@ -0,0 +1,7 @@
   106.4+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
   106.5+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
   106.6+<head>
   106.7+<link rel="icon" href="{staticurl|urlescape}hgicon.png" type="image/png" />
   106.8+<meta name="robots" content="index, nofollow" />
   106.9+<link rel="stylesheet" href="{staticurl|urlescape}style-paper.css" type="text/css" />
  106.10+<script type="text/javascript" src="{staticurl|urlescape}mercurial.js"></script>
   107.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   107.2+++ b/templates/paper/help.tmpl	Sat Jul 20 22:31:54 2024 -0400
   107.3@@ -0,0 +1,34 @@
   107.4+{header}
   107.5+<title>Help: {topic}</title>
   107.6+</head>
   107.7+<body>
   107.8+
   107.9+<div class="container">
  107.10+<div class="menu">
  107.11+<div class="logo">
  107.12+<a href="{logourl}">
  107.13+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
  107.14+</div>
  107.15+<ul>
  107.16+<li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">log</a></li>
  107.17+<li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
  107.18+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
  107.19+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  107.20+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
  107.21+</ul>
  107.22+<ul>
  107.23+ <li class="active"><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
  107.24+</ul>
  107.25+</div>
  107.26+
  107.27+<div class="main">
  107.28+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  107.29+<h3>Help: {topic}</h3>
  107.30+{searchform}
  107.31+<div id="doc">
  107.32+{rstdoc(doc, "html")}
  107.33+</div>
  107.34+</div>
  107.35+</div>
  107.36+
  107.37+{footer}
   108.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   108.2+++ b/templates/paper/helptopics.tmpl	Sat Jul 20 22:31:54 2024 -0400
   108.3@@ -0,0 +1,48 @@
   108.4+{header}
   108.5+<title>Help: {title}</title>
   108.6+</head>
   108.7+<body>
   108.8+
   108.9+<div class="container">
  108.10+<div class="menu">
  108.11+<div class="logo">
  108.12+<a href="{logourl}">
  108.13+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
  108.14+</div>
  108.15+<ul>
  108.16+<li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">log</a></li>
  108.17+<li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
  108.18+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
  108.19+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  108.20+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
  108.21+</ul>
  108.22+<ul>
  108.23+{if(subindex,
  108.24+  '<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>',
  108.25+  '<li class="active">help</li>'
  108.26+)}
  108.27+</ul>
  108.28+</div>
  108.29+
  108.30+<div class="main">
  108.31+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  108.32+{searchform}
  108.33+<table class="bigtable">
  108.34+<tr><td colspan="2"><h2><a name="topics" href="#topics">Topics</a></h2></td></tr>
  108.35+{topics % helpentry}
  108.36+
  108.37+{if(earlycommands, '
  108.38+<tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
  108.39+{earlycommands % helpentry}
  108.40+')}
  108.41+
  108.42+{if(othercommands, '
  108.43+<tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
  108.44+{othercommands % helpentry}
  108.45+')}
  108.46+
  108.47+</table>
  108.48+</div>
  108.49+</div>
  108.50+
  108.51+{footer}
   109.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   109.2+++ b/templates/paper/index.tmpl	Sat Jul 20 22:31:54 2024 -0400
   109.3@@ -0,0 +1,31 @@
   109.4+{header}
   109.5+<title>Mercurial repositories index</title>
   109.6+</head>
   109.7+<body>
   109.8+
   109.9+<div class="container">
  109.10+<div class="menu">
  109.11+<a href="{logourl}">
  109.12+<img src="{staticurl|urlescape}{logoimg}" width=75 height=90 border=0 alt="mercurial" /></a>
  109.13+</div>
  109.14+<div class="main">
  109.15+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  109.16+
  109.17+<table class="bigtable">
  109.18+    <thead>
  109.19+    <tr>
  109.20+        <th><a href="?sort={sort_name}">Name</a></th>
  109.21+        <th><a href="?sort={sort_description}">Description</a></th>
  109.22+        <th><a href="?sort={sort_contact}">Contact</a></th>
  109.23+        <th><a href="?sort={sort_lastchange}">Last modified</a></th>
  109.24+        <th>&nbsp;</th>
  109.25+        <th>&nbsp;</th>
  109.26+    </tr>
  109.27+    </thead>
  109.28+    <tbody class="stripes2">
  109.29+    {entries%indexentry}
  109.30+    </tbody>
  109.31+</table>
  109.32+</div>
  109.33+</div>
  109.34+{footer}
   110.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   110.2+++ b/templates/paper/manifest.tmpl	Sat Jul 20 22:31:54 2024 -0400
   110.3@@ -0,0 +1,56 @@
   110.4+{header}
   110.5+<title>{repo|escape}: {node|short} {path|escape}</title>
   110.6+</head>
   110.7+<body>
   110.8+
   110.9+<div class="container">
  110.10+<div class="menu">
  110.11+<div class="logo">
  110.12+<a href="{logourl}">
  110.13+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
  110.14+</div>
  110.15+<ul>
  110.16+<li><a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">log</a></li>
  110.17+<li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
  110.18+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
  110.19+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  110.20+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
  110.21+</ul>
  110.22+<ul>
  110.23+<li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
  110.24+<li class="active">browse</li>
  110.25+</ul>
  110.26+<ul>
  110.27+{archives%archiveentry}
  110.28+</ul>
  110.29+<ul>
  110.30+ <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
  110.31+</ul>
  110.32+</div>
  110.33+
  110.34+<div class="main">
  110.35+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  110.36+<h3>
  110.37+ directory {path|escape} @ {rev}:<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
  110.38+ {alltags}
  110.39+</h3>
  110.40+
  110.41+{searchform}
  110.42+
  110.43+<table class="bigtable">
  110.44+<thead>
  110.45+<tr>
  110.46+  <th class="name">name</th>
  110.47+  <th class="size">size</th>
  110.48+  <th class="permissions">permissions</th>
  110.49+</tr>
  110.50+</thead>
  110.51+<tbody class="stripes2">
  110.52+{ifeq(path, up, '', updirentry)}
  110.53+{dentries%direntry}
  110.54+{fentries%fileentry}
  110.55+</tbody>
  110.56+</table>
  110.57+</div>
  110.58+</div>
  110.59+{footer}
   111.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   111.2+++ b/templates/paper/map	Sat Jul 20 22:31:54 2024 -0400
   111.3@@ -0,0 +1,292 @@
   111.4+default = 'shortlog'
   111.5+
   111.6+mimetype = 'text/html; charset={encoding}'
   111.7+header = header.tmpl
   111.8+footer = footer.tmpl
   111.9+search = search.tmpl
  111.10+
  111.11+changelog = shortlog.tmpl
  111.12+shortlog = shortlog.tmpl
  111.13+shortlogentry = shortlogentry.tmpl
  111.14+graph = graph.tmpl
  111.15+graphentry = graphentry.tmpl
  111.16+help = help.tmpl
  111.17+helptopics = helptopics.tmpl
  111.18+
  111.19+helpentry = '
  111.20+  <tr><td>
  111.21+    <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
  111.22+      {if(basename, '{basename|escape}', '{topic|escape}')}
  111.23+    </a>
  111.24+  </td><td>
  111.25+    {summary|escape}
  111.26+  </td></tr>'
  111.27+
  111.28+naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
  111.29+navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
  111.30+navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
  111.31+filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
  111.32+filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
  111.33+filenodelink = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
  111.34+filenolink = '{file|escape} '
  111.35+fileellipses = '...'
  111.36+diffstatlink = diffstat.tmpl
  111.37+diffstatnolink = diffstat.tmpl
  111.38+changelogentry = shortlogentry.tmpl
  111.39+changeset = changeset.tmpl
  111.40+manifest = manifest.tmpl
  111.41+
  111.42+nav = '{before%naventry} {after%naventry}'
  111.43+navshort = '{before%navshortentry}{after%navshortentry}'
  111.44+navgraph = '{before%navgraphentry}{after%navgraphentry}'
  111.45+filenav = '{before%filenaventry}{after%filenaventry}'
  111.46+
  111.47+updirentry = '
  111.48+  <tr class="fileline">
  111.49+    <td class="name">
  111.50+      <a href="{url|urlescape}file/{symrev}{up|urlescape}{sessionvars%urlparameter}">[up]</a>
  111.51+    </td>
  111.52+    <td class="size"></td>
  111.53+    <td class="permissions">drwxr-xr-x</td>
  111.54+  </tr>'
  111.55+
  111.56+direntry = '
  111.57+  <tr class="fileline">
  111.58+    <td class="name">
  111.59+      <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">
  111.60+        <img src="{staticurl|urlescape}coal-folder.png" alt="dir."/> {basename|escape}/
  111.61+      </a>
  111.62+      <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
  111.63+        {emptydirs|escape}
  111.64+      </a>
  111.65+    </td>
  111.66+    <td class="size"></td>
  111.67+    <td class="permissions">drwxr-xr-x</td>
  111.68+  </tr>'
  111.69+
  111.70+fileentry = '
  111.71+  <tr class="fileline">
  111.72+    <td class="filename">
  111.73+      <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">
  111.74+        <img src="{staticurl|urlescape}coal-file.png" alt="file"/> {basename|escape}
  111.75+      </a>
  111.76+    </td>
  111.77+    <td class="size">{size}</td>
  111.78+    <td class="permissions">{permissions|permissions}</td>
  111.79+  </tr>'
  111.80+
  111.81+filerevision = filerevision.tmpl
  111.82+fileannotate = fileannotate.tmpl
  111.83+filediff = filediff.tmpl
  111.84+filecomparison = filecomparison.tmpl
  111.85+filelog = filelog.tmpl
  111.86+fileline = '
  111.87+  <span id="{lineid}">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
  111.88+filelogentry = filelogentry.tmpl
  111.89+
  111.90+annotateline = '
  111.91+  <tr id="{lineid}"{ifeq(node, originalnode, ' class="thisrev"')}>
  111.92+    <td class="annotate parity{blockparity}">
  111.93+      {if(blockhead,
  111.94+          '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
  111.95+             {rev}
  111.96+           </a>')}
  111.97+      <div class="annotate-info">
  111.98+        <div>
  111.99+          <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
 111.100+            {node|short}</a>
 111.101+          {desc|escape|firstline}
 111.102+        </div>
 111.103+        <div><em>{author|obfuscate}</em></div>
 111.104+        <div>parents: {parents%annotateparent}</div>
 111.105+        <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
 111.106+        <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
 111.107+      </div>
 111.108+    </td>
 111.109+    <td class="source followlines-btn-parent"><a href="#{lineid}">{linenumber}</a> {line|escape}</td>
 111.110+  </tr>'
 111.111+annotateparent = '
 111.112+  <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
 111.113+diffblock = '<div class="bottomline inc-lineno"><pre class="sourcelines wrap">{lines}</pre></div>'
 111.114+difflineplus = '
 111.115+  <span id="{lineid}" class="plusline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
 111.116+difflineminus = '
 111.117+  <span id="{lineid}" class="minusline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
 111.118+difflineat = '
 111.119+  <span id="{lineid}" class="atline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
 111.120+diffline = '
 111.121+  <span id="{lineid}">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
 111.122+
 111.123+comparisonblock ='
 111.124+  <tbody class="block">
 111.125+  {lines}
 111.126+  </tbody>'
 111.127+comparisonline = '
 111.128+  <tr id="{lineid}">
 111.129+    <td class="source {type}"><a href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</td>
 111.130+    <td class="source {type}"><a href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</td>
 111.131+  </tr>'
 111.132+
 111.133+changesetparent = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
 111.134+
 111.135+changesetparentdiff = '
 111.136+  {changesetparent}
 111.137+  {ifeq(node, basenode, '(current diff)', '({difffrom})')}'
 111.138+
 111.139+difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
 111.140+
 111.141+filerevparent = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
 111.142+filerevchild = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
 111.143+
 111.144+filerename = '{file|escape}@'
 111.145+filelogrename = '
 111.146+  <span class="base">
 111.147+    base
 111.148+    <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
 111.149+      {file|escape}@{node|short}
 111.150+    </a>
 111.151+  </span>'
 111.152+fileannotateparent = '
 111.153+  <tr>
 111.154+    <td class="metatag">parent:</td>
 111.155+    <td>
 111.156+      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
 111.157+        {rename%filerename}{node|short}
 111.158+      </a>
 111.159+    </td>
 111.160+  </tr>'
 111.161+changesetchild = ' <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
 111.162+fileannotatechild = '
 111.163+  <tr>
 111.164+    <td class="metatag">child:</td>
 111.165+    <td>
 111.166+      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
 111.167+        {node|short}
 111.168+      </a>
 111.169+    </td>
 111.170+  </tr>'
 111.171+tags = tags.tmpl
 111.172+tagentry = '
 111.173+  <tr class="tagEntry">
 111.174+    <td>
 111.175+      <a href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}">
 111.176+        {tag|escape}
 111.177+      </a>
 111.178+    </td>
 111.179+    <td class="node">
 111.180+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
 111.181+        {node|short}
 111.182+      </a>
 111.183+    </td>
 111.184+  </tr>'
 111.185+bookmarks = bookmarks.tmpl
 111.186+bookmarkentry = '
 111.187+  <tr class="tagEntry">
 111.188+    <td>
 111.189+      <a href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}">
 111.190+        {bookmark|escape}
 111.191+      </a>
 111.192+    </td>
 111.193+    <td class="node">
 111.194+      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
 111.195+        {node|short}
 111.196+      </a>
 111.197+    </td>
 111.198+  </tr>'
 111.199+branches = branches.tmpl
 111.200+branchentry = '
 111.201+  <tr class="tagEntry">
 111.202+    <td>
 111.203+      <a href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}" class="{status}">
 111.204+        {branch|escape}
 111.205+      </a>
 111.206+    </td>
 111.207+    <td class="node">
 111.208+      <a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
 111.209+        {node|short}
 111.210+      </a>
 111.211+    </td>
 111.212+  </tr>'
 111.213+phasetag = '{ifeq(phase, 'public', '', '<span class="phase">{phase|escape}</span> ')}'
 111.214+obsoletetag = '{if(obsolete, '<span class="obsolete">obsolete</span> ')}'
 111.215+instabilitytag = '<span class="instability">{instability|escape}</span> '
 111.216+changelogtag = '<span class="tag">{name|escape}</span> '
 111.217+changesettag = '<span class="tag">{tag|escape}</span> '
 111.218+changesetbookmark = '<span class="tag">{bookmark|escape}</span> '
 111.219+changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
 111.220+changelogbranchname = '<span class="branchname">{name|escape}</span> '
 111.221+alltags = '{phasetag}{obsoletetag}{instabilities%instabilitytag}{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}{bookmarks%changelogtag}'
 111.222+
 111.223+successorlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
 111.224+obsfatesuccessors = '{if(successors, ' as ')}{successors%successorlink}'
 111.225+obsfateverb = '{obsfateverb(successors, markers)}'
 111.226+obsfateoperations = '{if(obsfateoperations(markers), ' using {join(obsfateoperations(markers), ', ')}')}'
 111.227+obsfateusers = '{if(obsfateusers(markers), ' by {join(obsfateusers(markers)%'{user|obfuscate}', ', ')}')}'
 111.228+obsfatedate = '{if(obsfatedate(markers), ' {ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), '<span class="age">{min(obsfatedate(markers))|rfc822date}</span>', 'between <span class="age">{min(obsfatedate(markers))|rfc822date}</span> and <span class="age">{max(obsfatedate(markers))|rfc822date}</span>')}')}'
 111.229+obsfateentry = '{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}'
 111.230+instabilitychangesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
 111.231+divergentnode = '{instabilitychangesetlink} ({phase})'
 111.232+whyunstableentry = '{instability}: {if(divergentnodes, divergentnodes%divergentnode)} {reason} {instabilitychangesetlink}'
 111.233+
 111.234+filediffparent = '
 111.235+  <tr>
 111.236+    <th class="parent">parent {rev}:</th>
 111.237+    <td class="parent"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
 111.238+  </tr>'
 111.239+filediffchild = '
 111.240+  <tr>
 111.241+    <th class="child">child {rev}:</th>
 111.242+    <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
 111.243+  </td>
 111.244+  </tr>'
 111.245+
 111.246+indexentry = '
 111.247+  <tr>
 111.248+    <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
 111.249+    <td>{description}</td>
 111.250+    <td>{contact|obfuscate}</td>
 111.251+    <td class="age">{lastchange|rfc822date}</td>
 111.252+    <td class="indexlinks">{archives%indexarchiveentry}</td>
 111.253+    <td>
 111.254+        {if(isdirectory, '',
 111.255+            '<a href="{url|urlescape}atom-log" title="subscribe to repository atom feed">
 111.256+                <img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="subscribe to repository atom feed">
 111.257+            </a>'
 111.258+            )}
 111.259+    </td>
 111.260+  </tr>\n'
 111.261+indexarchiveentry = '<a href="{url|urlescape}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
 111.262+index = index.tmpl
 111.263+archiveentry = '
 111.264+  <li>
 111.265+    <a href="{url|urlescape}archive/{symrev}{extension|urlescape}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a>
 111.266+  </li>'
 111.267+notfound = notfound.tmpl
 111.268+error = error.tmpl
 111.269+urlparameter = '{separator}{name}={value|urlescape}'
 111.270+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
 111.271+breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
 111.272+
 111.273+searchform = '
 111.274+  <form class="search" action="{url|urlescape}log">
 111.275+    {sessionvars%hiddenformentry}
 111.276+    <p><input name="rev" id="search1" type="text" size="30" value="{query|escape}" /></p>
 111.277+    <div id="hint">{searchhint}</div>
 111.278+  </form>'
 111.279+searchhint = 'Find changesets by keywords (author, files, the commit message), revision
 111.280+  number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
 111.281+
 111.282+diffoptsform = '
 111.283+  <form id="diffopts-form"
 111.284+    data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
 111.285+    data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
 111.286+    data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
 111.287+    data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
 111.288+    <span>Ignore whitespace changes - </span>
 111.289+    <span>Everywhere:</span>
 111.290+    <input id="ignorews-checkbox" type="checkbox" />
 111.291+    <span>Within whitespace:</span>
 111.292+    <input id="ignorewsamount-checkbox" type="checkbox" />
 111.293+    <span>At end of lines:</span>
 111.294+    <input id="ignorewseol-checkbox" type="checkbox" />
 111.295+  </form>'
   112.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   112.2+++ b/templates/paper/notfound.tmpl	Sat Jul 20 22:31:54 2024 -0400
   112.3@@ -0,0 +1,12 @@
   112.4+{header}
   112.5+<title>Mercurial repository not found</title>
   112.6+</head>
   112.7+<body>
   112.8+
   112.9+<h2>Mercurial repository not found</h2>
  112.10+
  112.11+The specified repository "{repo|escape}" is unknown, sorry.
  112.12+
  112.13+Please go back to the <a href="{url|urlescape}">main repository list page</a>.
  112.14+
  112.15+{footer}
   113.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   113.2+++ b/templates/paper/search.tmpl	Sat Jul 20 22:31:54 2024 -0400
   113.3@@ -0,0 +1,64 @@
   113.4+{header}
   113.5+<title>{repo|escape}: searching for {query|escape}</title>
   113.6+</head>
   113.7+<body>
   113.8+
   113.9+<div class="container">
  113.10+<div class="menu">
  113.11+<div class="logo">
  113.12+<a href="{logourl}">
  113.13+<img src="{staticurl|urlescape}{logoimg}" width=75 height=90 border=0 alt="mercurial"></a>
  113.14+</div>
  113.15+<ul>
  113.16+<li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">log</a></li>
  113.17+<li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
  113.18+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
  113.19+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  113.20+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
  113.21+</ul>
  113.22+<ul>
  113.23+<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
  113.24+</ul>
  113.25+</div>
  113.26+
  113.27+<div class="main">
  113.28+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  113.29+<h3>searching for '{query|escape}'</h3>
  113.30+
  113.31+<p>
  113.32+Assuming {modedesc}.
  113.33+{if(showforcekw, '<a href="{url|urlescape}log?rev={query|urlescape}&forcekw=1">
  113.34+Use {showforcekw}</a> instead.')}
  113.35+{if(showunforcekw, '<a href="{url|urlescape}log?rev={query|urlescape}">
  113.36+Use {showunforcekw}</a> instead.')}
  113.37+</p>
  113.38+
  113.39+{searchform}
  113.40+
  113.41+<div class="navigate">
  113.42+<a href="{url|urlescape}log{lessvars%urlparameter}">less</a>
  113.43+<a href="{url|urlescape}log{morevars%urlparameter}">more</a>
  113.44+</div>
  113.45+
  113.46+<table class="bigtable">
  113.47+<thead>
  113.48+ <tr>
  113.49+  <th class="age">age</th>
  113.50+  <th class="author">author</th>
  113.51+  <th class="description">description</th>
  113.52+ </tr>
  113.53+</thead>
  113.54+<tbody class="stripes2">
  113.55+{entries%changelogentry}
  113.56+</tbody>
  113.57+</table>
  113.58+
  113.59+<div class="navigate">
  113.60+<a href="{url|urlescape}log{lessvars%urlparameter}">less</a>
  113.61+<a href="{url|urlescape}log{morevars%urlparameter}">more</a>
  113.62+</div>
  113.63+
  113.64+</div>
  113.65+</div>
  113.66+
  113.67+{footer}
   114.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   114.2+++ b/templates/paper/shortlog.tmpl	Sat Jul 20 22:31:54 2024 -0400
   114.3@@ -0,0 +1,89 @@
   114.4+{header}
   114.5+<title>{repo|escape}: log</title>
   114.6+<link rel="alternate" type="application/atom+xml"
   114.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}" />
   114.8+<link rel="alternate" type="application/rss+xml"
   114.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}" />
  114.10+</head>
  114.11+<body>
  114.12+
  114.13+<div class="container">
  114.14+<div class="menu">
  114.15+<div class="logo">
  114.16+<a href="{logourl}">
  114.17+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
  114.18+</div>
  114.19+<ul>
  114.20+<li class="active">log</li>
  114.21+<li><a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a></li>
  114.22+<li><a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a></li>
  114.23+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  114.24+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
  114.25+</ul>
  114.26+<ul>
  114.27+<li><a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a></li>
  114.28+<li><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
  114.29+</ul>
  114.30+<ul>
  114.31+{archives%archiveentry}
  114.32+</ul>
  114.33+<ul>
  114.34+ <li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
  114.35+</ul>
  114.36+<div class="atom-logo">
  114.37+<a href="{url|urlescape}atom-log" title="subscribe to atom feed">
  114.38+<img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="atom feed" />
  114.39+</a>
  114.40+</div>
  114.41+</div>
  114.42+
  114.43+<div class="main">
  114.44+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  114.45+<h3>log</h3>
  114.46+
  114.47+{searchform}
  114.48+
  114.49+<div class="navigate">
  114.50+<a href="{url|urlescape}shortlog/{symrev}{lessvars%urlparameter}">less</a>
  114.51+<a href="{url|urlescape}shortlog/{symrev}{morevars%urlparameter}">more</a>
  114.52+| rev {rev}: {changenav%navshort}
  114.53+</div>
  114.54+
  114.55+<table class="bigtable">
  114.56+<thead>
  114.57+ <tr>
  114.58+  <th class="age">age</th>
  114.59+  <th class="author">author</th>
  114.60+  <th class="description">description</th>
  114.61+ </tr>
  114.62+</thead>
  114.63+<tbody class="stripes2">
  114.64+{entries%shortlogentry}
  114.65+</tbody>
  114.66+</table>
  114.67+
  114.68+<div class="navigate">
  114.69+<a href="{url|urlescape}shortlog/{symrev}{lessvars%urlparameter}">less</a>
  114.70+<a href="{url|urlescape}shortlog/{symrev}{morevars%urlparameter}">more</a>
  114.71+| rev {rev}: {changenav%navshort}
  114.72+</div>
  114.73+
  114.74+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
  114.75+    ajaxScrollInit(
  114.76+            '{url|urlescape}shortlog/%next%{sessionvars%urlparameter}',
  114.77+            '{nextentry%"{node}"}', <!-- NEXTHASH
  114.78+            function (htmlText) \{
  114.79+                var m = htmlText.match(/'(\w+)', <!-- NEXTHASH/);
  114.80+                return m ? m[1] : null;
  114.81+            },
  114.82+            '.bigtable > tbody',
  114.83+            '<tr class="%class%">\\
  114.84+            <td colspan="3" style="text-align: center;">%text%</td>\\
  114.85+            </tr>'
  114.86+    );
  114.87+</script>
  114.88+
  114.89+</div>
  114.90+</div>
  114.91+
  114.92+{footer}
   115.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   115.2+++ b/templates/paper/shortlogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   115.3@@ -0,0 +1,8 @@
   115.4+ <tr>
   115.5+  <td class="age">{date|rfc822date}</td>
   115.6+  <td class="author">{author|person}</td>
   115.7+  <td class="description">
   115.8+   <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>
   115.9+   {alltags}
  115.10+  </td>
  115.11+ </tr>
   116.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   116.2+++ b/templates/paper/tags.tmpl	Sat Jul 20 22:31:54 2024 -0400
   116.3@@ -0,0 +1,53 @@
   116.4+{header}
   116.5+<title>{repo|escape}: tags</title>
   116.6+<link rel="alternate" type="application/atom+xml"
   116.7+   href="{url|urlescape}atom-tags" title="Atom feed for {repo|escape}: tags" />
   116.8+<link rel="alternate" type="application/rss+xml"
   116.9+   href="{url|urlescape}rss-tags" title="RSS feed for {repo|escape}: tags" />
  116.10+</head>
  116.11+<body>
  116.12+
  116.13+<div class="container">
  116.14+<div class="menu">
  116.15+<div class="logo">
  116.16+<a href="{logourl}">
  116.17+<img src="{staticurl|urlescape}{logoimg}" alt="mercurial" /></a>
  116.18+</div>
  116.19+<ul>
  116.20+<li><a href="{url|urlescape}shortlog{sessionvars%urlparameter}">log</a></li>
  116.21+<li><a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a></li>
  116.22+<li class="active">tags</li>
  116.23+<li><a href="{url|urlescape}bookmarks{sessionvars%urlparameter}">bookmarks</a></li>
  116.24+<li><a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a></li>
  116.25+</ul>
  116.26+<ul>
  116.27+<li><a href="{url|urlescape}help{sessionvars%urlparameter}">help</a></li>
  116.28+</ul>
  116.29+<div class="atom-logo">
  116.30+<a href="{url|urlescape}atom-tags" title="subscribe to atom feed">
  116.31+<img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="atom feed" />
  116.32+</a>
  116.33+</div>
  116.34+</div>
  116.35+
  116.36+<div class="main">
  116.37+<h2 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  116.38+<h3>tags</h3>
  116.39+
  116.40+{searchform}
  116.41+
  116.42+<table class="bigtable">
  116.43+<thead>
  116.44+<tr>
  116.45+ <th>tag</th>
  116.46+ <th>node</th>
  116.47+</tr>
  116.48+</thead>
  116.49+<tbody class="stripes2">
  116.50+{entries%tagentry}
  116.51+</tbody>
  116.52+</table>
  116.53+</div>
  116.54+</div>
  116.55+
  116.56+{footer}
   118.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   118.2+++ b/templates/raw/changelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
   118.3@@ -0,0 +1,5 @@
   118.4+{header}
   118.5+# HG changelog
   118.6+# Node ID {node}
   118.7+
   118.8+{entries%changelogentry}
   119.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   119.2+++ b/templates/raw/changeset.tmpl	Sat Jul 20 22:31:54 2024 -0400
   119.3@@ -0,0 +1,9 @@
   119.4+{header}
   119.5+# HG changeset patch
   119.6+# User {author}
   119.7+# Date {date|hgdate}
   119.8+# Node ID {node}
   119.9+{parent%changesetparent}
  119.10+{desc}
  119.11+
  119.12+{diff}
   120.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   120.2+++ b/templates/raw/error.tmpl	Sat Jul 20 22:31:54 2024 -0400
   120.3@@ -0,0 +1,2 @@
   120.4+{header}
   120.5+error: {error}
   121.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   121.2+++ b/templates/raw/fileannotate.tmpl	Sat Jul 20 22:31:54 2024 -0400
   121.3@@ -0,0 +1,5 @@
   121.4+{header}
   121.5+{annotate%annotateline}
   121.6+{footer}
   121.7+
   121.8+
   122.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   122.2+++ b/templates/raw/filediff.tmpl	Sat Jul 20 22:31:54 2024 -0400
   122.3@@ -0,0 +1,5 @@
   122.4+{header}
   122.5+{diff}
   122.6+{footer}
   122.7+
   122.8+
   123.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   123.2+++ b/templates/raw/graph.tmpl	Sat Jul 20 22:31:54 2024 -0400
   123.3@@ -0,0 +1,6 @@
   123.4+{header}
   123.5+# HG graph
   123.6+# Node ID {node}
   123.7+# Rows shown {rows}
   123.8+
   123.9+{nodes%graphnode}
   124.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   124.2+++ b/templates/raw/graphedge.tmpl	Sat Jul 20 22:31:54 2024 -0400
   124.3@@ -0,0 +1,1 @@
   124.4+edge:        ({col}, {row}) -> ({nextcol}, {nextrow}) (color {color})
   125.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   125.2+++ b/templates/raw/graphnode.tmpl	Sat Jul 20 22:31:54 2024 -0400
   125.3@@ -0,0 +1,7 @@
   125.4+changeset:   {node|short}
   125.5+user:        {author|person}
   125.6+date:        {date|age}
   125.7+summary:     {desc|firstline|nonempty}
   125.8+{branches%branchname}{tags%tagname}{bookmarks%bookmarkname}
   125.9+node:        ({col}, {row}) (color {color})
  125.10+{edges%graphedge}
   126.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   126.2+++ b/templates/raw/index.tmpl	Sat Jul 20 22:31:54 2024 -0400
   126.3@@ -0,0 +1,2 @@
   126.4+{header}
   126.5+{entries%indexentry}
   127.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   127.2+++ b/templates/raw/logentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   127.3@@ -0,0 +1,6 @@
   127.4+changeset:   {node}
   127.5+revision:    {rev}
   127.6+user:        {author}
   127.7+date:        {date|rfc822date}
   127.8+summary:     {desc}
   127.9+{branches%branchname}{tags%tagname}{bookmarks%bookmarkname}
   128.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   128.2+++ b/templates/raw/manifest.tmpl	Sat Jul 20 22:31:54 2024 -0400
   128.3@@ -0,0 +1,3 @@
   128.4+{header}
   128.5+{dentries%direntry}{fentries%fileentry}
   128.6+{footer}
   129.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   129.2+++ b/templates/raw/map	Sat Jul 20 22:31:54 2024 -0400
   129.3@@ -0,0 +1,41 @@
   129.4+default = 'shortlog'
   129.5+shortlog = "'raw' is not a browsable style"
   129.6+changelog = changelog.tmpl
   129.7+changelogentry = logentry.tmpl
   129.8+search = search.tmpl
   129.9+mimetype = 'text/plain; charset={encoding}'
  129.10+header = ''
  129.11+footer = ''
  129.12+changeset = changeset.tmpl
  129.13+difflineplus = '{line}'
  129.14+difflineminus = '{line}'
  129.15+difflineat = '{line}'
  129.16+diffline = '{line}'
  129.17+changesetparent = '# Parent  {node}'
  129.18+changesetchild = '# Child   {node}'
  129.19+filenodelink = ''
  129.20+filenolink = ''
  129.21+fileline = '{line}'
  129.22+diffblock = '{lines}'
  129.23+filediff = filediff.tmpl
  129.24+fileannotate = fileannotate.tmpl
  129.25+annotateline = '{author|user}@{rev}: {line}'
  129.26+manifest = manifest.tmpl
  129.27+direntry = 'drwxr-xr-x {basename}\n'
  129.28+fileentry = '{permissions|permissions} {size} {basename}\n'
  129.29+index = index.tmpl
  129.30+notfound = notfound.tmpl
  129.31+error = error.tmpl
  129.32+indexentry = '{url}\n'
  129.33+tags = '{entries%tagentry}'
  129.34+tagentry = '{tag}	{node}\n'
  129.35+bookmarks = '{entries%bookmarkentry}'
  129.36+bookmarkentry = '{bookmark}	{node}\n'
  129.37+branches = '{entries%branchentry}'
  129.38+branchentry = '{branch}	{node}	{status}\n'
  129.39+graph = graph.tmpl
  129.40+graphnode = graphnode.tmpl
  129.41+graphedge = graphedge.tmpl
  129.42+bookmarkname = 'bookmark:    {name}\n'
  129.43+branchname = 'branch:      {name}\n'
  129.44+tagname = 'tag:         {name}\n'
   130.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   130.2+++ b/templates/raw/notfound.tmpl	Sat Jul 20 22:31:54 2024 -0400
   130.3@@ -0,0 +1,2 @@
   130.4+{header}
   130.5+error: repository {repo} not found
   131.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   131.2+++ b/templates/raw/search.tmpl	Sat Jul 20 22:31:54 2024 -0400
   131.3@@ -0,0 +1,7 @@
   131.4+{header}
   131.5+# HG changesets search
   131.6+# Node ID {node}
   131.7+# Query "{query}"
   131.8+# Mode {modedesc}
   131.9+
  131.10+{entries%changelogentry}
   133.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   133.2+++ b/templates/rss/bookmarkentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   133.3@@ -0,0 +1,6 @@
   133.4+<item>
   133.5+    <title>{bookmark|escape}</title>
   133.6+    <link>{urlbase}{url|urlescape}rev/{node|short}</link>
   133.7+    <description><![CDATA[{bookmark|strip|escape|addbreaks}]]></description>
   133.8+    <pubDate>{date|rfc822date}</pubDate>
   133.9+</item>
   134.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   134.2+++ b/templates/rss/bookmarks.tmpl	Sat Jul 20 22:31:54 2024 -0400
   134.3@@ -0,0 +1,6 @@
   134.4+{header}
   134.5+    <title>{repo|escape}: bookmarks</title>
   134.6+    <description>{repo|escape} bookmark history</description>
   134.7+    {entries%bookmarkentry}
   134.8+  </channel>
   134.9+</rss>
   135.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   135.2+++ b/templates/rss/branchentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   135.3@@ -0,0 +1,6 @@
   135.4+<item>
   135.5+    <title>{branch|escape}</title>
   135.6+    <link>{urlbase}{url|urlescape}rev/{node|short}</link>
   135.7+    <description><![CDATA[{branch|strip|escape|addbreaks}]]></description>
   135.8+    <pubDate>{date|rfc822date}</pubDate>
   135.9+</item>
   136.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   136.2+++ b/templates/rss/branches.tmpl	Sat Jul 20 22:31:54 2024 -0400
   136.3@@ -0,0 +1,6 @@
   136.4+{header}
   136.5+    <title>{repo|escape}: branches</title>
   136.6+    <description>{repo|escape} branch history</description>
   136.7+    {entries%branchentry}
   136.8+  </channel>
   136.9+</rss>
   137.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   137.2+++ b/templates/rss/changelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
   137.3@@ -0,0 +1,6 @@
   137.4+{header}
   137.5+    <title>{repo|escape} Changelog</title>
   137.6+    <description>{repo|escape} Changelog</description>
   137.7+    {entries%changelogentry}
   137.8+  </channel>
   137.9+</rss>
  137.10\ No newline at end of file
   138.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   138.2+++ b/templates/rss/changelogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   138.3@@ -0,0 +1,41 @@
   138.4+<item>
   138.5+    <title>{inbranch%"{if(name, '[{name|escape}] ')}"}{branches%"{if(name, '[{name|escape}] ')}"}{desc|strip|firstline|strip|escape}</title>
   138.6+    <guid isPermaLink="true">{urlbase}{url|urlescape}rev/{node|short}</guid>
   138.7+    <link>{urlbase}{url|urlescape}rev/{node|short}</link>
   138.8+    <description>
   138.9+    <![CDATA[
  138.10+        <table>
  138.11+            <tr>
  138.12+                <th style="text-align:left;">changeset</th>
  138.13+                <td>{node|short}</td>
  138.14+            </tr>
  138.15+            <tr>
  138.16+                <th style="text-align:left;">branch</th>
  138.17+                <td>{inbranch%"{name|escape}"}{branches%"{name|escape}"}</td>
  138.18+            </tr>
  138.19+            <tr>
  138.20+                <th style="text-align:left;">bookmark</th>
  138.21+                <td>{bookmarks%"{name|escape}"}</td>
  138.22+            </tr>
  138.23+            <tr>
  138.24+                <th style="text-align:left;">tag</th>
  138.25+                <td>{tags%"{name|escape}"}</td>
  138.26+            </tr>
  138.27+            <tr>
  138.28+                <th style="text-align:left;vertical-align:top;">user</th>
  138.29+                <td>{author|obfuscate}</td>
  138.30+            </tr>
  138.31+            <tr>
  138.32+                <th style="text-align:left;vertical-align:top;">description</th>
  138.33+                <td>{desc|strip|escape|websub|addbreaks|nonempty}</td>
  138.34+            </tr>
  138.35+            <tr>
  138.36+                <th style="text-align:left;vertical-align:top;">files</th>
  138.37+                <td>{files}</td>
  138.38+            </tr>
  138.39+        </table>
  138.40+    ]]>
  138.41+    </description>
  138.42+    <author>{author|obfuscate}</author>
  138.43+    <pubDate>{date|rfc822date}</pubDate>
  138.44+</item>
   139.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   139.2+++ b/templates/rss/error.tmpl	Sat Jul 20 22:31:54 2024 -0400
   139.3@@ -0,0 +1,10 @@
   139.4+{header}
   139.5+    <title>Error</title>
   139.6+    <description>Error</description>
   139.7+    <item>
   139.8+      <title>Error</title>
   139.9+      <description>{error|escape}</description>
  139.10+      <guid>https://mercurial-scm.org/#error</guid>
  139.11+    </item>
  139.12+  </channel>
  139.13+</rss>
   140.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   140.2+++ b/templates/rss/filelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
   140.3@@ -0,0 +1,6 @@
   140.4+{header}
   140.5+    <title>{repo|escape}: {file|escape} history</title>
   140.6+    <description>{file|escape} revision history</description>
   140.7+    {entries%filelogentry}
   140.8+  </channel>
   140.9+</rss>
   141.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   141.2+++ b/templates/rss/filelogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   141.3@@ -0,0 +1,7 @@
   141.4+<item>
   141.5+    <title>{desc|strip|firstline|strip|escape}</title>
   141.6+    <link>{urlbase}{url|urlescape}log/{node|short}/{file|urlescape}</link>
   141.7+    <description><![CDATA[{desc|strip|escape|websub|addbreaks|nonempty}]]></description>
   141.8+    <author>{author|obfuscate}</author>
   141.9+    <pubDate>{date|rfc822date}</pubDate>
  141.10+</item>
   142.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   142.2+++ b/templates/rss/header.tmpl	Sat Jul 20 22:31:54 2024 -0400
   142.3@@ -0,0 +1,5 @@
   142.4+<?xml version="1.0" encoding="{encoding}"?>
   142.5+<rss version="2.0">
   142.6+  <channel>
   142.7+    <link>{urlbase}{url|urlescape}</link>
   142.8+    <language>en-us</language>
   143.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   143.2+++ b/templates/rss/map	Sat Jul 20 22:31:54 2024 -0400
   143.3@@ -0,0 +1,18 @@
   143.4+default = 'changelog'
   143.5+mimetype = 'text/xml; charset={encoding}'
   143.6+header = header.tmpl
   143.7+changelog = changelog.tmpl
   143.8+changelogentry = changelogentry.tmpl
   143.9+filelog = filelog.tmpl
  143.10+filelogentry = filelogentry.tmpl
  143.11+tags = tags.tmpl
  143.12+tagentry = tagentry.tmpl
  143.13+bookmarks = bookmarks.tmpl
  143.14+bookmarkentry = bookmarkentry.tmpl
  143.15+branches = branches.tmpl
  143.16+branchentry = branchentry.tmpl
  143.17+error = error.tmpl
  143.18+filedifflink = '{file|escape}<br />'
  143.19+fileellipses = '{file|escape}<br />'
  143.20+filenodelink = '{file|escape}<br />'
  143.21+filenolink = '{file|escape}<br />'
   144.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   144.2+++ b/templates/rss/tagentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   144.3@@ -0,0 +1,6 @@
   144.4+<item>
   144.5+    <title>{tag|escape}</title>
   144.6+    <link>{urlbase}{url|urlescape}rev/{node|short}</link>
   144.7+    <description><![CDATA[{tag|strip|escape|addbreaks}]]></description>
   144.8+    <pubDate>{date|rfc822date}</pubDate>
   144.9+</item>
   145.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   145.2+++ b/templates/rss/tags.tmpl	Sat Jul 20 22:31:54 2024 -0400
   145.3@@ -0,0 +1,6 @@
   145.4+{header}
   145.5+    <title>{repo|escape}: tags</title>
   145.6+    <description>{repo|escape} tag history</description>
   145.7+    {entriesnotip%tagentry}
   145.8+  </channel>
   145.9+</rss>
   147.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   147.2+++ b/templates/spartan/branches.tmpl	Sat Jul 20 22:31:54 2024 -0400
   147.3@@ -0,0 +1,27 @@
   147.4+{header}
   147.5+<title>{repo|escape}: branches</title>
   147.6+<link rel="alternate" type="application/atom+xml"
   147.7+   href="{url|urlescape}atom-branches" title="Atom feed for {repo|escape}: branches">
   147.8+<link rel="alternate" type="application/rss+xml"
   147.9+   href="{url|urlescape}rss-branches" title="RSS feed for {repo|escape}: branches">
  147.10+</head>
  147.11+<body>
  147.12+
  147.13+<div class="buttons">
  147.14+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a>
  147.15+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a>
  147.16+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a>
  147.17+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  147.18+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a>
  147.19+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  147.20+<a type="application/rss+xml" href="{url|urlescape}rss-branches">rss</a>
  147.21+<a type="application/atom+xml" href="{url|urlescape}atom-branches">atom</a>
  147.22+</div>
  147.23+
  147.24+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / branches</h2>
  147.25+
  147.26+<ul id="tagEntries">
  147.27+{entries%branchentry}
  147.28+</ul>
  147.29+
  147.30+{footer}
   148.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   148.2+++ b/templates/spartan/changelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
   148.3@@ -0,0 +1,44 @@
   148.4+{header}
   148.5+<title>{repo|escape}: changelog</title>
   148.6+<link rel="alternate" type="application/atom+xml"
   148.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}">
   148.8+<link rel="alternate" type="application/rss+xml"
   148.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}">
  148.10+</head>
  148.11+<body>
  148.12+
  148.13+<div class="buttons">
  148.14+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
  148.15+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
  148.16+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  148.17+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  148.18+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a>
  148.19+{archives%archiveentry}
  148.20+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  148.21+<a type="application/rss+xml" href="{url|urlescape}rss-log">rss</a>
  148.22+<a type="application/atom+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}">atom</a>
  148.23+</div>
  148.24+
  148.25+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / changelog</h2>
  148.26+
  148.27+<form action="{url|urlescape}log">
  148.28+{sessionvars%hiddenformentry}
  148.29+<p>
  148.30+<label for="search1">search:</label>
  148.31+<input name="rev" id="search1" type="text" size="30">
  148.32+navigate: <small class="navigate">{changenav%nav}</small>
  148.33+</p>
  148.34+</form>
  148.35+
  148.36+{entries%changelogentry}
  148.37+
  148.38+<form action="{url|urlescape}log">
  148.39+{sessionvars%hiddenformentry}
  148.40+<p>
  148.41+<label for="search2">search:</label>
  148.42+<input name="rev" id="search2" type="text" size="30">
  148.43+navigate: <small class="navigate">{changenav%nav}</small>
  148.44+</p>
  148.45+</form>
  148.46+
  148.47+{footer}
   149.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   149.2+++ b/templates/spartan/changelogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   149.3@@ -0,0 +1,31 @@
   149.4+<table class="logEntry parity{parity}">
   149.5+ <tr>
   149.6+  <th class="label"><span class="age">{date|rfc822date}</span>:</th>
   149.7+  <th class="firstline">{desc|strip|firstline|escape|nonempty}</th>
   149.8+ </tr>
   149.9+ <tr>
  149.10+  <th class="revision">changeset {rev}:</th>
  149.11+  <td class="node"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
  149.12+ </tr>
  149.13+ {parent%changelogparent}
  149.14+ {child%changelogchild}
  149.15+ {changelogtag}
  149.16+ <tr>
  149.17+  <th class="author">author:</th>
  149.18+  <td class="author">{author|obfuscate}</td>
  149.19+ </tr>
  149.20+ <tr>
  149.21+  <th class="date">date:</th>
  149.22+  <td class="date">{date|rfc822date}</td>
  149.23+ </tr>
  149.24+ {ifeq(phase, 'public', '', '<tr>
  149.25+  <th class="phase">phase:</th>
  149.26+  <td class="phase">{phase|escape}</td>
  149.27+ </tr>')}
  149.28+ {if(obsolete, succsandmarkers%obsfateentry)}
  149.29+ {if(instabilities, whyunstable%whyunstableentry)}
  149.30+ <tr>
  149.31+  <th class="files"><a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>:</th>
  149.32+  <td class="files">{files}</td>
  149.33+ </tr>
  149.34+</table>
   150.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   150.2+++ b/templates/spartan/changeset.tmpl	Sat Jul 20 22:31:54 2024 -0400
   150.3@@ -0,0 +1,58 @@
   150.4+{header}
   150.5+<title>{repo|escape}: changeset {node|short}</title>
   150.6+</head>
   150.7+<body>
   150.8+
   150.9+<div class="buttons">
  150.10+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
  150.11+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
  150.12+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
  150.13+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  150.14+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  150.15+<a href="{url|urlescape}file/{symrev}{sessionvars%urlparameter}">files</a>
  150.16+<a href="{url|urlescape}raw-rev/{symrev}">raw</a>
  150.17+{archives%archiveentry}
  150.18+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  150.19+</div>
  150.20+
  150.21+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / changeset: {desc|strip|escape|firstline|nonempty}</h2>
  150.22+
  150.23+<table id="changesetEntry">
  150.24+<tr>
  150.25+ <th class="changeset">changeset {rev}:</th>
  150.26+ <td class="changeset"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
  150.27+</tr>
  150.28+{ifeq(count(parent), '2', parent%changesetparentdiff, parent%changesetparent)}
  150.29+{child%changesetchild}
  150.30+{changesettag}
  150.31+<tr>
  150.32+ <th class="author">author:</th>
  150.33+ <td class="author">{author|obfuscate}</td>
  150.34+</tr>
  150.35+<tr>
  150.36+ <th class="date">date:</th>
  150.37+ <td class="date age">{date|rfc822date}</td>
  150.38+</tr>
  150.39+{ifeq(phase, 'public', '', '<tr>
  150.40+ <th class="phase">phase:</th>
  150.41+ <td class="phase">{phase|escape}</td>
  150.42+</tr>')}
  150.43+{if(obsolete, succsandmarkers%obsfateentry)}
  150.44+{if(instabilities, whyunstable%whyunstableentry)}
  150.45+<tr>
  150.46+ <th class="files">files:</th>
  150.47+ <td class="files">{files}</td>
  150.48+</tr>
  150.49+<tr>
  150.50+ <th class="description">description:</th>
  150.51+ <td class="description">{desc|strip|escape|websub|addbreaks|nonempty}</td>
  150.52+</tr>
  150.53+</table>
  150.54+
  150.55+<div id="changesetDiff">
  150.56+{diff}
  150.57+</div>
  150.58+
  150.59+{footer}
  150.60+
  150.61+
   151.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   151.2+++ b/templates/spartan/error.tmpl	Sat Jul 20 22:31:54 2024 -0400
   151.3@@ -0,0 +1,15 @@
   151.4+{header}
   151.5+<title>Mercurial Error</title>
   151.6+</head>
   151.7+<body>
   151.8+
   151.9+<h2>Mercurial Error</h2>
  151.10+
  151.11+<p>
  151.12+An error occurred while processing your request:
  151.13+</p>
  151.14+<p>
  151.15+{error|escape}
  151.16+</p>
  151.17+
  151.18+{footer}
   152.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   152.2+++ b/templates/spartan/fileannotate.tmpl	Sat Jul 20 22:31:54 2024 -0400
   152.3@@ -0,0 +1,51 @@
   152.4+{header}
   152.5+<title>{repo|escape}: {file|escape} annotate</title>
   152.6+</head>
   152.7+<body>
   152.8+
   152.9+<div class="buttons">
  152.10+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
  152.11+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
  152.12+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
  152.13+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  152.14+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  152.15+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a>
  152.16+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a>
  152.17+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a>
  152.18+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
  152.19+<a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a>
  152.20+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  152.21+</div>
  152.22+
  152.23+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / annotate {file|escape}</h2>
  152.24+
  152.25+<table>
  152.26+<tr>
  152.27+ <td class="metatag">changeset {rev}:</td>
  152.28+ <td><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
  152.29+</tr>
  152.30+{parent%fileannotateparent}
  152.31+{child%fileannotatechild}
  152.32+<tr>
  152.33+ <td class="metatag">author:</td>
  152.34+ <td>{author|obfuscate}</td>
  152.35+</tr>
  152.36+<tr>
  152.37+ <td class="metatag">date:</td>
  152.38+ <td class="date age">{date|rfc822date}</td>
  152.39+</tr>
  152.40+<tr>
  152.41+ <td class="metatag">permissions:</td>
  152.42+ <td>{permissions|permissions}</td>
  152.43+</tr>
  152.44+<tr>
  152.45+  <td class="metatag">description:</td>
  152.46+  <td>{desc|strip|escape|websub|addbreaks|nonempty}</td>
  152.47+</tr>
  152.48+</table>
  152.49+
  152.50+<table cellspacing="0" cellpadding="0">
  152.51+{annotate%annotateline}
  152.52+</table>
  152.53+
  152.54+{footer}
   153.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   153.2+++ b/templates/spartan/filediff.tmpl	Sat Jul 20 22:31:54 2024 -0400
   153.3@@ -0,0 +1,37 @@
   153.4+{header}
   153.5+<title>{repo|escape}: {file|escape} diff</title>
   153.6+</head>
   153.7+<body>
   153.8+
   153.9+<div class="buttons">
  153.10+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
  153.11+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
  153.12+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
  153.13+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  153.14+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  153.15+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a>
  153.16+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a>
  153.17+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
  153.18+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
  153.19+<a href="{url|urlescape}raw-diff/{symrev}/{file|urlescape}">raw</a>
  153.20+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  153.21+</div>
  153.22+
  153.23+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / {file|escape}</h2>
  153.24+
  153.25+<table id="filediffEntry">
  153.26+<tr>
  153.27+ <th class="revision">revision {rev}:</th>
  153.28+ <td class="revision"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
  153.29+</tr>
  153.30+{parent%filediffparent}
  153.31+{child%filediffchild}
  153.32+</table>
  153.33+
  153.34+<div id="fileDiff">
  153.35+{diff}
  153.36+</div>
  153.37+
  153.38+{footer}
  153.39+
  153.40+
   154.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   154.2+++ b/templates/spartan/filelog.tmpl	Sat Jul 20 22:31:54 2024 -0400
   154.3@@ -0,0 +1,29 @@
   154.4+{header}
   154.5+<title>{repo|escape}: {file|escape} history</title>
   154.6+<link rel="alternate" type="application/atom+xml"
   154.7+   href="{url|urlescape}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}">
   154.8+<link rel="alternate" type="application/rss+xml"
   154.9+   href="{url|urlescape}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}">
  154.10+</head>
  154.11+<body>
  154.12+
  154.13+<div class="buttons">
  154.14+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a>
  154.15+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a>
  154.16+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a>
  154.17+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  154.18+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  154.19+<a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a>
  154.20+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
  154.21+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  154.22+<a type="application/rss+xml" href="{url|urlescape}rss-log/tip/{file|urlescape}">rss</a>
  154.23+<a type="application/atom+xml" href="{url|urlescape}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}">atom</a>
  154.24+</div>
  154.25+
  154.26+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / {file|escape} revision history</h2>
  154.27+
  154.28+<p>navigate: <small class="navigate">{nav%filenav}</small></p>
  154.29+
  154.30+{entries%filelogentry}
  154.31+
  154.32+{footer}
   155.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   155.2+++ b/templates/spartan/filelogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   155.3@@ -0,0 +1,25 @@
   155.4+<table class="logEntry parity{parity}">
   155.5+ <tr>
   155.6+  <th class="label"><span class="age">{date|rfc822date}</span>:</th>
   155.7+  <th class="firstline"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></th>
   155.8+ </tr>
   155.9+ <tr>
  155.10+  <th class="revision">revision {filerev}:</th>
  155.11+  <td class="node">
  155.12+   <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
  155.13+   <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">(diff)</a>
  155.14+   <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">(annotate)</a>
  155.15+  </td>
  155.16+ </tr>
  155.17+ {rename%filelogrename}
  155.18+ <tr>
  155.19+  <th class="author">author:</th>
  155.20+  <td class="author">{author|obfuscate}</td>
  155.21+ </tr>
  155.22+ <tr>
  155.23+  <th class="date">date:</th>
  155.24+  <td class="date">{date|rfc822date}</td>
  155.25+ </tr>
  155.26+</table>
  155.27+
  155.28+
   156.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   156.2+++ b/templates/spartan/filerevision.tmpl	Sat Jul 20 22:31:54 2024 -0400
   156.3@@ -0,0 +1,51 @@
   156.4+{header}
   156.5+<title>{repo|escape}:{file|escape}</title>
   156.6+</head>
   156.7+<body>
   156.8+
   156.9+<div class="buttons">
  156.10+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
  156.11+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
  156.12+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
  156.13+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  156.14+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  156.15+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a>
  156.16+<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a>
  156.17+<a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
  156.18+<a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
  156.19+<a href="{url|urlescape}raw-file/{symrev}/{file|urlescape}">raw</a>
  156.20+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  156.21+</div>
  156.22+
  156.23+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / {file|escape}</h2>
  156.24+
  156.25+<table>
  156.26+<tr>
  156.27+ <td class="metatag">changeset {rev}:</td>
  156.28+ <td><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
  156.29+</tr>
  156.30+{parent%filerevparent}
  156.31+{child%filerevchild}
  156.32+<tr>
  156.33+ <td class="metatag">author:</td>
  156.34+ <td>{author|obfuscate}</td>
  156.35+</tr>
  156.36+<tr>
  156.37+ <td class="metatag">date:</td>
  156.38+ <td class="date age">{date|rfc822date}</td>
  156.39+</tr>
  156.40+<tr>
  156.41+ <td class="metatag">permissions:</td>
  156.42+ <td>{permissions|permissions}</td>
  156.43+</tr>
  156.44+<tr>
  156.45+  <td class="metatag">description:</td>
  156.46+  <td>{desc|strip|escape|websub|addbreaks|nonempty}</td>
  156.47+</tr>
  156.48+</table>
  156.49+
  156.50+<pre>
  156.51+{text%fileline}
  156.52+</pre>
  156.53+
  156.54+{footer}
   157.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   157.2+++ b/templates/spartan/footer.tmpl	Sat Jul 20 22:31:54 2024 -0400
   157.3@@ -0,0 +1,8 @@
   157.4+{motd}
   157.5+<div class="logo">
   157.6+<a href="{logourl}">
   157.7+<img src="{staticurl|urlescape}{logoimg}" width=75 height=90 border=0 alt="mercurial"></a>
   157.8+</div>
   157.9+
  157.10+</body>
  157.11+</html>
   158.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   158.2+++ b/templates/spartan/graph.tmpl	Sat Jul 20 22:31:54 2024 -0400
   158.3@@ -0,0 +1,53 @@
   158.4+{header}
   158.5+<title>{repo|escape}: graph</title>
   158.6+<link rel="alternate" type="application/atom+xml"
   158.7+   href="{url|urlescape}atom-tags" title="Atom feed for {repo|escape}: tags">
   158.8+<link rel="alternate" type="application/rss+xml"
   158.9+   href="{url|urlescape}rss-tags" title="RSS feed for {repo|escape}: tags">
  158.10+</head>
  158.11+<body>
  158.12+
  158.13+<div class="buttons">
  158.14+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
  158.15+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
  158.16+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  158.17+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  158.18+<a href="{url|urlescape}file/{symrev}/{sessionvars%urlparameter}">files</a>
  158.19+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  158.20+</div>
  158.21+
  158.22+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / graph</h2>
  158.23+
  158.24+<form action="{url|urlescape}log">
  158.25+{sessionvars%hiddenformentry}
  158.26+<p>
  158.27+<label for="search1">search:</label>
  158.28+<input name="rev" id="search1" type="text" size="30">
  158.29+navigate: <small class="navigate">{changenav%navgraph}</small>
  158.30+</p>
  158.31+</form>
  158.32+
  158.33+<noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
  158.34+
  158.35+<div id="wrapper">
  158.36+<canvas id="graph"></canvas>
  158.37+<ul id="graphnodes">{nodes%graphentry}</ul>
  158.38+</div>
  158.39+
  158.40+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
  158.41+var data = {jsdata|json};
  158.42+var graph = new Graph();
  158.43+graph.scale({bg_height});
  158.44+graph.render(data);
  158.45+</script>
  158.46+
  158.47+<form action="{url|urlescape}log">
  158.48+{sessionvars%hiddenformentry}
  158.49+<p>
  158.50+<label for="search1">search:</label>
  158.51+<input name="rev" id="search1" type="text" size="30">
  158.52+navigate: <small class="navigate">{changenav%navgraph}</small>
  158.53+</p>
  158.54+</form>
  158.55+
  158.56+{footer}
   159.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   159.2+++ b/templates/spartan/graphentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   159.3@@ -0,0 +1,8 @@
   159.4+<li class="parity{parity}" data-node="{node|short}">
   159.5+ <div class="fg">
   159.6+  <span class="desc">
   159.7+   <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>
   159.8+  </span>
   159.9+  <div class="info"><span class="age">{date|rfc822date}</span>, by {author|person}</div>
  159.10+ </div>
  159.11+</li>
   160.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   160.2+++ b/templates/spartan/header.tmpl	Sat Jul 20 22:31:54 2024 -0400
   160.3@@ -0,0 +1,7 @@
   160.4+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
   160.5+<html>
   160.6+<head>
   160.7+<link rel="icon" href="{staticurl|urlescape}hgicon.png" type="image/png">
   160.8+<meta name="robots" content="index, nofollow" />
   160.9+<link rel="stylesheet" href="{staticurl|urlescape}style.css" type="text/css" />
  160.10+<script type="text/javascript" src="{staticurl|urlescape}mercurial.js"></script>
   161.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   161.2+++ b/templates/spartan/index.tmpl	Sat Jul 20 22:31:54 2024 -0400
   161.3@@ -0,0 +1,19 @@
   161.4+{header}
   161.5+<title>Mercurial repositories index</title>
   161.6+</head>
   161.7+<body>
   161.8+
   161.9+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb}</h2>
  161.10+
  161.11+<table>
  161.12+    <tr>
  161.13+        <td><a href="?sort={sort_name}">Name</a></td>
  161.14+        <td><a href="?sort={sort_description}">Description</a></td>
  161.15+        <td><a href="?sort={sort_contact}">Contact</a></td>
  161.16+        <td><a href="?sort={sort_lastchange}">Last modified</a></td>
  161.17+        <td>&nbsp;</td>
  161.18+    </tr>
  161.19+    {entries%indexentry}
  161.20+</table>
  161.21+
  161.22+{footer}
   162.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   162.2+++ b/templates/spartan/manifest.tmpl	Sat Jul 20 22:31:54 2024 -0400
   162.3@@ -0,0 +1,24 @@
   162.4+{header}
   162.5+<title>{repo|escape}: files for changeset {node|short}</title>
   162.6+</head>
   162.7+<body>
   162.8+
   162.9+<div class="buttons">
  162.10+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
  162.11+<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
  162.12+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
  162.13+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  162.14+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  162.15+<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a>
  162.16+{archives%archiveentry}
  162.17+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  162.18+</div>
  162.19+
  162.20+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / files for changeset <a href="{url|urlescape}rev/{node|short}">{node|short}</a>: {path|escape}</h2>
  162.21+
  162.22+<table cellpadding="0" cellspacing="0">
  162.23+{ifeq(path, up, '', updirentry)}
  162.24+{dentries%direntry}
  162.25+{fentries%fileentry}
  162.26+</table>
  162.27+{footer}
   163.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   163.2+++ b/templates/spartan/map	Sat Jul 20 22:31:54 2024 -0400
   163.3@@ -0,0 +1,227 @@
   163.4+default = 'shortlog'
   163.5+mimetype = 'text/html; charset={encoding}'
   163.6+header = header.tmpl
   163.7+footer = footer.tmpl
   163.8+search = search.tmpl
   163.9+changelog = changelog.tmpl
  163.10+shortlog = shortlog.tmpl
  163.11+shortlogentry = shortlogentry.tmpl
  163.12+graph = graph.tmpl
  163.13+graphentry = graphentry.tmpl
  163.14+naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
  163.15+navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
  163.16+navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
  163.17+filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
  163.18+filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
  163.19+filenodelink = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
  163.20+filenolink = '{file|escape} '
  163.21+fileellipses = '...'
  163.22+changelogentry = changelogentry.tmpl
  163.23+changeset = changeset.tmpl
  163.24+manifest = manifest.tmpl
  163.25+
  163.26+nav = '{before%naventry} {after%naventry}'
  163.27+navshort = '{before%navshortentry}{after%navshortentry}'
  163.28+navgraph = '{before%navgraphentry}{after%navgraphentry}'
  163.29+filenav = '{before%filenaventry}{after%filenaventry}'
  163.30+
  163.31+updirentry = '
  163.32+  <tr class="parity{upparity}">
  163.33+    <td><tt>drwxr-xr-x</tt>&nbsp;</td>
  163.34+    <td>&nbsp;</td>
  163.35+    <td>&nbsp;</td>
  163.36+    <td>
  163.37+      <a href="{url|urlescape}file/{symrev}{up|urlescape}{sessionvars%urlparameter}">[up]</a>
  163.38+    </td>
  163.39+  </tr> '
  163.40+
  163.41+direntry = '
  163.42+  <tr class="parity{parity}">
  163.43+    <td><tt>drwxr-xr-x</tt>&nbsp;</td>
  163.44+    <td>&nbsp;</td>
  163.45+    <td>&nbsp;</td>
  163.46+    <td>
  163.47+      <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}/</a>
  163.48+      <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
  163.49+        {emptydirs|urlescape}
  163.50+      </a>
  163.51+    </td>
  163.52+  </tr>'
  163.53+
  163.54+fileentry = '
  163.55+  <tr class="parity{parity}">
  163.56+    <td><tt>{permissions|permissions}</tt>&nbsp;</td>
  163.57+    <td align=right><tt class="date">{date|isodate}</tt>&nbsp;</td>
  163.58+    <td align=right><tt>{size}</tt>&nbsp;</td>
  163.59+    <td><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
  163.60+  </tr>'
  163.61+
  163.62+filerevision = filerevision.tmpl
  163.63+fileannotate = fileannotate.tmpl
  163.64+filediff = filediff.tmpl
  163.65+filelog = filelog.tmpl
  163.66+fileline = '<div class="parity{parity}"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>&nbsp;{line|escape}</div>'
  163.67+filelogentry = filelogentry.tmpl
  163.68+
  163.69+# The &nbsp; ensures that all table cells have content (even if there
  163.70+# is an empty line in the annotated file), which in turn ensures that
  163.71+# all table rows have equal height.
  163.72+annotateline = '
  163.73+  <tr class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
  163.74+    <td class="annotate parity{blockparity}">
  163.75+      {if(blockhead,
  163.76+          '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
  163.77+             {rev}
  163.78+           </a>')}
  163.79+      <div class="annotate-info">
  163.80+        <div>
  163.81+          <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
  163.82+            {node|short}</a>
  163.83+          {desc|escape|firstline}
  163.84+        </div>
  163.85+        <div><em>{author|obfuscate}</em></div>
  163.86+        <div>parents: {parents%annotateparent}</div>
  163.87+        <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
  163.88+        <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
  163.89+      </div>
  163.90+    </td>
  163.91+    <td>
  163.92+      <a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>
  163.93+    </td>
  163.94+    <td><pre>&nbsp;{line|escape}</pre></td>
  163.95+  </tr>'
  163.96+annotateparent = '
  163.97+  <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
  163.98+difflineplus = '<span class="plusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
  163.99+difflineminus = '<span class="minusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
 163.100+difflineat = '<span class="atline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
 163.101+diffline = '<a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}'
 163.102+changesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
 163.103+changelogparent = '
 163.104+  <tr>
 163.105+    <th class="parent">parent {rev}:</th>
 163.106+    <td class="parent">
 163.107+      {changesetlink}
 163.108+    </td>
 163.109+  </tr>'
 163.110+changesetparent = '
 163.111+  <tr>
 163.112+    <th class="parent">parent {rev}:</th>
 163.113+    <td class="parent">{changesetlink}</td>
 163.114+  </tr>'
 163.115+changesetparentdiff = '
 163.116+  <tr>
 163.117+    <th class="parent">parent {rev}:</th>
 163.118+    <td class="parent">{changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}</td>
 163.119+  </tr>'
 163.120+difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
 163.121+filerevparent = '
 163.122+  <tr>
 163.123+    <td class="metatag">parent:</td>
 163.124+    <td>
 163.125+      <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
 163.126+        {rename%filerename}{node|short}
 163.127+      </a>
 163.128+    </td>
 163.129+  </tr>'
 163.130+filerename = '{file|escape}@'
 163.131+filelogrename = '
 163.132+  <tr>
 163.133+    <th>base:</th>
 163.134+    <td>
 163.135+      <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
 163.136+        {file|escape}@{node|short}
 163.137+      </a>
 163.138+    </td>
 163.139+  </tr>'
 163.140+fileannotateparent = '
 163.141+  <tr>
 163.142+    <td class="metatag">parent:</td>
 163.143+    <td>
 163.144+      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
 163.145+        {rename%filerename}{node|short}
 163.146+      </a>
 163.147+    </td>
 163.148+  </tr>'
 163.149+changesetchild = '
 163.150+  <tr>
 163.151+    <th class="child">child {rev}:</th>
 163.152+    <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
 163.153+  </tr>'
 163.154+changelogchild = '
 163.155+  <tr>
 163.156+    <th class="child">child {rev}:</th>
 163.157+    <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
 163.158+  </tr>'
 163.159+filerevchild = '
 163.160+  <tr>
 163.161+    <td class="metatag">child:</td>
 163.162+    <td><a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
 163.163+  </tr>'
 163.164+fileannotatechild = '
 163.165+  <tr>
 163.166+    <td class="metatag">child:</td>
 163.167+    <td><a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
 163.168+  </tr>'
 163.169+tags = tags.tmpl
 163.170+tagentry = '
 163.171+  <li class="tagEntry parity{parity}">
 163.172+    <tt class="node">{node}</tt>
 163.173+    <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a>
 163.174+  </li>'
 163.175+branches = branches.tmpl
 163.176+branchentry = '
 163.177+  <li class="tagEntry parity{parity}">
 163.178+    <tt class="node">{node}</tt>
 163.179+    <a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">{branch|escape}</a>
 163.180+  </li>'
 163.181+diffblock = '<pre class="parity{parity}">{lines}</pre>'
 163.182+changelogtag = '<tr><th class="tag">tag:</th><td class="tag">{tag|escape}</td></tr>'
 163.183+changesettag = '<tr><th class="tag">tag:</th><td class="tag">{tag|escape}</td></tr>'
 163.184+successorlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
 163.185+obsfatesuccessors = '{if(successors, ' as ')}{successors%successorlink}'
 163.186+obsfateverb = '{obsfateverb(successors, markers)}'
 163.187+obsfateoperations = '{if(obsfateoperations(markers), ' using {join(obsfateoperations(markers), ', ')}')}'
 163.188+obsfateusers = '{if(obsfateusers(markers), ' by {join(obsfateusers(markers)%'{user|obfuscate}', ', ')}')}'
 163.189+obsfatedate = '{if(obsfatedate(markers), ' {ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), '<span class="age">{min(obsfatedate(markers))|rfc822date}</span>', 'between <span class="age">{min(obsfatedate(markers))|rfc822date}</span> and <span class="age">{max(obsfatedate(markers))|rfc822date}</span>')}')}'
 163.190+obsfateentry = '
 163.191+  <tr>
 163.192+    <th class="obsolete">obsolete:</th>
 163.193+    <td class="obsolete">{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}</td>
 163.194+  </tr>'
 163.195+instabilitychangesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
 163.196+divergentnode = '{instabilitychangesetlink} ({phase})'
 163.197+whyunstableentry = '
 163.198+  <tr>
 163.199+    <th class="unstable">unstable:</th>
 163.200+    <td class="unstable">{instability}: {if(divergentnodes, divergentnodes%divergentnode)} {reason} {instabilitychangesetlink}</td>
 163.201+  </tr>'
 163.202+filediffparent = '
 163.203+  <tr>
 163.204+    <th class="parent">parent {rev}:</th>
 163.205+    <td class="parent"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
 163.206+  </tr>'
 163.207+filediffchild = '
 163.208+  <tr>
 163.209+    <th class="child">child {rev}:</th>
 163.210+    <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
 163.211+  </tr>'
 163.212+indexentry = '
 163.213+  <tr class="parity{parity}">
 163.214+    <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
 163.215+    <td>{description}</td>
 163.216+    <td>{contact|obfuscate}</td>
 163.217+    <td class="age">{lastchange|rfc822date}</td>
 163.218+    <td class="indexlinks">
 163.219+      <a href="{url|urlescape}rss-log">RSS</a>
 163.220+      <a href="{url|urlescape}atom-log">Atom</a>
 163.221+      {archives%archiveentry}
 163.222+    </td>
 163.223+  </tr>'
 163.224+index = index.tmpl
 163.225+archiveentry = '<a href="{url|urlescape}archive/{symrev}{extension|urlescape}">{type|escape}</a> '
 163.226+notfound = notfound.tmpl
 163.227+error = error.tmpl
 163.228+urlparameter = '{separator}{name}={value|urlescape}'
 163.229+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
 163.230+breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
   164.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   164.2+++ b/templates/spartan/notfound.tmpl	Sat Jul 20 22:31:54 2024 -0400
   164.3@@ -0,0 +1,12 @@
   164.4+{header}
   164.5+<title>Mercurial repository not found</title>
   164.6+</head>
   164.7+<body>
   164.8+
   164.9+<h2>Mercurial repository not found</h2>
  164.10+
  164.11+The specified repository "{repo|escape}" is unknown, sorry.
  164.12+
  164.13+Please go back to the <a href="{url|urlescape}">main repository list page</a>.
  164.14+
  164.15+{footer}
   165.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   165.2+++ b/templates/spartan/search.tmpl	Sat Jul 20 22:31:54 2024 -0400
   165.3@@ -0,0 +1,37 @@
   165.4+{header}
   165.5+<title>{repo|escape}: searching for {query|escape}</title>
   165.6+</head>
   165.7+<body>
   165.8+
   165.9+<div class="buttons">
  165.10+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a>
  165.11+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a>
  165.12+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a>
  165.13+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  165.14+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  165.15+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a>
  165.16+{archives%archiveentry}
  165.17+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  165.18+</div>
  165.19+
  165.20+<h2>searching for {query|escape}</h2>
  165.21+
  165.22+<form>
  165.23+{sessionvars%hiddenformentry}
  165.24+<p>
  165.25+search:
  165.26+<input name="rev" type="text" width="30" value="{query|escape}">
  165.27+</p>
  165.28+</form>
  165.29+
  165.30+{entries%changelogentry}
  165.31+
  165.32+<form>
  165.33+{sessionvars%hiddenformentry}
  165.34+<p>
  165.35+search:
  165.36+<input name="rev" type="text" width="30" value="{query|escape}">
  165.37+</p>
  165.38+</form>
  165.39+
  165.40+{footer}
   166.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   166.2+++ b/templates/spartan/shortlog.tmpl	Sat Jul 20 22:31:54 2024 -0400
   166.3@@ -0,0 +1,44 @@
   166.4+{header}
   166.5+<title>{repo|escape}: shortlog</title>
   166.6+<link rel="alternate" type="application/atom+xml"
   166.7+   href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}">
   166.8+<link rel="alternate" type="application/rss+xml"
   166.9+   href="{url|urlescape}rss-log" title="RSS feed for {repo|escape}">
  166.10+</head>
  166.11+<body>
  166.12+
  166.13+<div class="buttons">
  166.14+<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
  166.15+<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
  166.16+<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
  166.17+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  166.18+<a href="{url|urlescape}file/{symrev}/{sessionvars%urlparameter}">files</a>
  166.19+{archives%archiveentry}
  166.20+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  166.21+<a type="application/rss+xml" href="{url|urlescape}rss-log">rss</a>
  166.22+<a type="application/rss+xml" href="{url|urlescape}atom-log" title="Atom feed for {repo|escape}">atom</a>
  166.23+</div>
  166.24+
  166.25+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / shortlog</h2>
  166.26+
  166.27+<form action="{url|urlescape}log">
  166.28+{sessionvars%hiddenformentry}
  166.29+<p>
  166.30+<label for="search1">search:</label>
  166.31+<input name="rev" id="search1" type="text" size="30">
  166.32+navigate: <small class="navigate">{changenav%navshort}</small>
  166.33+</p>
  166.34+</form>
  166.35+
  166.36+{entries%shortlogentry}
  166.37+
  166.38+<form action="{url|urlescape}log">
  166.39+{sessionvars%hiddenformentry}
  166.40+<p>
  166.41+<label for="search2">search:</label>
  166.42+<input name="rev" id="search2" type="text" size="30">
  166.43+navigate: <small class="navigate">{changenav%navshort}</small>
  166.44+</p>
  166.45+</form>
  166.46+
  166.47+{footer}
   167.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   167.2+++ b/templates/spartan/shortlogentry.tmpl	Sat Jul 20 22:31:54 2024 -0400
   167.3@@ -0,0 +1,7 @@
   167.4+<table class="slogEntry parity{parity}">
   167.5+ <tr>
   167.6+  <td class="age">{date|rfc822date}</td>
   167.7+  <td class="author">{author|person}</td>
   167.8+  <td class="node"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></td>
   167.9+ </tr>
  167.10+</table>
   168.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   168.2+++ b/templates/spartan/tags.tmpl	Sat Jul 20 22:31:54 2024 -0400
   168.3@@ -0,0 +1,27 @@
   168.4+{header}
   168.5+<title>{repo|escape}: tags</title>
   168.6+<link rel="alternate" type="application/atom+xml"
   168.7+   href="{url|urlescape}atom-tags" title="Atom feed for {repo|escape}: tags">
   168.8+<link rel="alternate" type="application/rss+xml"
   168.9+   href="{url|urlescape}rss-tags" title="RSS feed for {repo|escape}: tags">
  168.10+</head>
  168.11+<body>
  168.12+
  168.13+<div class="buttons">
  168.14+<a href="{url|urlescape}log{sessionvars%urlparameter}">changelog</a>
  168.15+<a href="{url|urlescape}shortlog{sessionvars%urlparameter}">shortlog</a>
  168.16+<a href="{url|urlescape}graph{sessionvars%urlparameter}">graph</a>
  168.17+<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
  168.18+<a href="{url|urlescape}file{sessionvars%urlparameter}">files</a>
  168.19+<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
  168.20+<a type="application/rss+xml" href="{url|urlescape}rss-tags">rss</a>
  168.21+<a type="application/atom+xml" href="{url|urlescape}atom-tags">atom</a>
  168.22+</div>
  168.23+
  168.24+<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / tags</h2>
  168.25+
  168.26+<ul id="tagEntries">
  168.27+{entries%tagentry}
  168.28+</ul>
  168.29+
  168.30+{footer}
   170.1Binary file templates/static/background.png has changed
   171.1Binary file templates/static/coal-file.png has changed
   172.1Binary file templates/static/coal-folder.png has changed
   173.1Binary file templates/static/feed-icon-14x14.png has changed
   174.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   174.2+++ b/templates/static/followlines.js	Sat Jul 20 22:31:54 2024 -0400
   174.3@@ -0,0 +1,286 @@
   174.4+// followlines.js - JavaScript utilities for followlines UI
   174.5+//
   174.6+// Copyright 2017 Logilab SA <contact@logilab.fr>
   174.7+//
   174.8+// This software may be used and distributed according to the terms of the
   174.9+// GNU General Public License version 2 or any later version.
  174.10+
  174.11+//** Install event listeners for line block selection and followlines action */
  174.12+document.addEventListener('DOMContentLoaded', function() {
  174.13+    var sourcelines = document.getElementsByClassName('sourcelines')[0];
  174.14+    if (typeof sourcelines === 'undefined') {
  174.15+        return;
  174.16+    }
  174.17+    // URL to complement with "linerange" query parameter
  174.18+    var targetUri = sourcelines.dataset.logurl;
  174.19+    if (typeof targetUri === 'undefined') {
  174.20+        return;
  174.21+    }
  174.22+
  174.23+    // Tag of children of "sourcelines" element on which to add "line
  174.24+    // selection" style.
  174.25+    var selectableTag = sourcelines.dataset.selectabletag;
  174.26+    if (typeof selectableTag === 'undefined') {
  174.27+        return;
  174.28+    }
  174.29+
  174.30+    var isHead = parseInt(sourcelines.dataset.ishead || "0");
  174.31+
  174.32+    //* position "element" on top-right of cursor */
  174.33+    function positionTopRight(element, event) {
  174.34+        var x = (event.clientX + 10) + 'px',
  174.35+            y = (event.clientY - 20) + 'px';
  174.36+        element.style.top = y;
  174.37+        element.style.left = x;
  174.38+    }
  174.39+
  174.40+    // retrieve all direct *selectable* children of class="sourcelines"
  174.41+    // element
  174.42+    var selectableElements = Array.prototype.filter.call(
  174.43+        sourcelines.children,
  174.44+        function(x) { return x.tagName === selectableTag; });
  174.45+
  174.46+    var btnTitleStart = 'start following lines history from here';
  174.47+    var btnTitleEnd = 'terminate line block selection here';
  174.48+
  174.49+    //** return a <button> element with +/- spans */
  174.50+    function createButton() {
  174.51+        var btn = document.createElement('button');
  174.52+        btn.title = btnTitleStart;
  174.53+        btn.classList.add('btn-followlines');
  174.54+        var plusSpan = document.createElement('span');
  174.55+        plusSpan.classList.add('followlines-plus');
  174.56+        plusSpan.innerHTML = '&plus;';
  174.57+        btn.appendChild(plusSpan);
  174.58+        var br = document.createElement('br');
  174.59+        btn.appendChild(br);
  174.60+        var minusSpan = document.createElement('span');
  174.61+        minusSpan.classList.add('followlines-minus');
  174.62+        minusSpan.innerHTML = '&minus;';
  174.63+        btn.appendChild(minusSpan);
  174.64+        return btn;
  174.65+    }
  174.66+
  174.67+    // extend DOM with CSS class for selection highlight and action buttons
  174.68+    var followlinesButtons = [];
  174.69+    for (var i = 0; i < selectableElements.length; i++) {
  174.70+        selectableElements[i].classList.add('followlines-select');
  174.71+        var btn = createButton();
  174.72+        followlinesButtons.push(btn);
  174.73+        // insert the <button> as child of `selectableElements[i]` unless the
  174.74+        // latter has itself a child  with a "followlines-btn-parent" class
  174.75+        // (annotate view)
  174.76+        var btnSupportElm = selectableElements[i];
  174.77+        var childSupportElms = btnSupportElm.getElementsByClassName(
  174.78+            'followlines-btn-parent');
  174.79+        if ( childSupportElms.length > 0 ) {
  174.80+            btnSupportElm = childSupportElms[0];
  174.81+        }
  174.82+        var refNode = btnSupportElm.childNodes[0]; // node to insert <button> before
  174.83+        btnSupportElm.insertBefore(btn, refNode);
  174.84+    }
  174.85+
  174.86+    // ** re-initialize followlines buttons */
  174.87+    function resetButtons() {
  174.88+        for (var i = 0; i < followlinesButtons.length; i++) {
  174.89+            var btn = followlinesButtons[i];
  174.90+            btn.title = btnTitleStart;
  174.91+            btn.classList.remove('btn-followlines-end');
  174.92+            btn.classList.remove('btn-followlines-hidden');
  174.93+        }
  174.94+    }
  174.95+
  174.96+    var lineSelectedCSSClass = 'followlines-selected';
  174.97+
  174.98+    //** add CSS class on selectable elements in `from`-`to` line range */
  174.99+    function addSelectedCSSClass(from, to) {
 174.100+        for (var i = from; i <= to; i++) {
 174.101+            selectableElements[i].classList.add(lineSelectedCSSClass);
 174.102+        }
 174.103+    }
 174.104+
 174.105+    //** remove CSS class from previously selected lines */
 174.106+    function removeSelectedCSSClass() {
 174.107+        var elements = sourcelines.getElementsByClassName(
 174.108+            lineSelectedCSSClass);
 174.109+        while (elements.length) {
 174.110+            elements[0].classList.remove(lineSelectedCSSClass);
 174.111+        }
 174.112+    }
 174.113+
 174.114+    // ** return the element of type "selectableTag" parent of `element` */
 174.115+    function selectableParent(element) {
 174.116+        var parent = element.parentElement;
 174.117+        if (parent === null) {
 174.118+            return null;
 174.119+        }
 174.120+        if (element.tagName === selectableTag && parent.isSameNode(sourcelines)) {
 174.121+            return element;
 174.122+        }
 174.123+        return selectableParent(parent);
 174.124+    }
 174.125+
 174.126+    // ** update buttons title and style upon first click */
 174.127+    function updateButtons(selectable) {
 174.128+        for (var i = 0; i < followlinesButtons.length; i++) {
 174.129+            var btn = followlinesButtons[i];
 174.130+            btn.title = btnTitleEnd;
 174.131+            btn.classList.add('btn-followlines-end');
 174.132+        }
 174.133+        // on clicked button, change title to "cancel"
 174.134+        var clicked = selectable.getElementsByClassName('btn-followlines')[0];
 174.135+        clicked.title = 'cancel';
 174.136+        clicked.classList.remove('btn-followlines-end');
 174.137+    }
 174.138+
 174.139+    //** add `listener` on "click" event for all `followlinesButtons` */
 174.140+    function buttonsAddEventListener(listener) {
 174.141+        for (var i = 0; i < followlinesButtons.length; i++) {
 174.142+            followlinesButtons[i].addEventListener('click', listener);
 174.143+        }
 174.144+    }
 174.145+
 174.146+    //** remove `listener` on "click" event for all `followlinesButtons` */
 174.147+    function buttonsRemoveEventListener(listener) {
 174.148+        for (var i = 0; i < followlinesButtons.length; i++) {
 174.149+            followlinesButtons[i].removeEventListener('click', listener);
 174.150+        }
 174.151+    }
 174.152+
 174.153+    //** event handler for "click" on the first line of a block */
 174.154+    function lineSelectStart(e) {
 174.155+        var startElement = selectableParent(e.target.parentElement);
 174.156+        if (startElement === null) {
 174.157+            // not a "selectable" element (maybe <a>): abort, keeping event
 174.158+            // listener registered for other click with a "selectable" target
 174.159+            return;
 174.160+        }
 174.161+
 174.162+        // update button tooltip text and CSS
 174.163+        updateButtons(startElement);
 174.164+
 174.165+        var startId = parseInt(startElement.id.slice(1));
 174.166+        startElement.classList.add(lineSelectedCSSClass); // CSS
 174.167+
 174.168+        // remove this event listener
 174.169+        buttonsRemoveEventListener(lineSelectStart);
 174.170+
 174.171+        //** event handler for "click" on the last line of the block */
 174.172+        function lineSelectEnd(e) {
 174.173+            var endElement = selectableParent(e.target.parentElement);
 174.174+            if (endElement === null) {
 174.175+                // not a <span> (maybe <a>): abort, keeping event listener
 174.176+                // registered for other click with <span> target
 174.177+                return;
 174.178+            }
 174.179+
 174.180+            // remove this event listener
 174.181+            buttonsRemoveEventListener(lineSelectEnd);
 174.182+
 174.183+            // reset button tooltip text
 174.184+            resetButtons();
 174.185+
 174.186+            // compute line range (startId, endId)
 174.187+            var endId = parseInt(endElement.id.slice(1));
 174.188+            if (endId === startId) {
 174.189+                // clicked twice the same line, cancel and reset initial state
 174.190+                // (CSS, event listener for selection start)
 174.191+                removeSelectedCSSClass();
 174.192+                buttonsAddEventListener(lineSelectStart);
 174.193+                return;
 174.194+            }
 174.195+            var inviteElement = endElement;
 174.196+            if (endId < startId) {
 174.197+                var tmp = endId;
 174.198+                endId = startId;
 174.199+                startId = tmp;
 174.200+                inviteElement = startElement;
 174.201+            }
 174.202+
 174.203+            addSelectedCSSClass(startId - 1, endId -1);  // CSS
 174.204+
 174.205+            // append the <div id="followlines"> element to last line of the
 174.206+            // selection block
 174.207+            var divAndButton = followlinesBox(targetUri, startId, endId, isHead);
 174.208+            var div = divAndButton[0],
 174.209+                button = divAndButton[1];
 174.210+            inviteElement.appendChild(div);
 174.211+            // set position close to cursor (top-right)
 174.212+            positionTopRight(div, e);
 174.213+            // hide all buttons
 174.214+            for (var i = 0; i < followlinesButtons.length; i++) {
 174.215+                followlinesButtons[i].classList.add('btn-followlines-hidden');
 174.216+            }
 174.217+
 174.218+            //** event handler for cancelling selection */
 174.219+            function cancel() {
 174.220+                // remove invite box
 174.221+                div.parentNode.removeChild(div);
 174.222+                // restore initial event listeners
 174.223+                buttonsAddEventListener(lineSelectStart);
 174.224+                buttonsRemoveEventListener(cancel);
 174.225+                for (var i = 0; i < followlinesButtons.length; i++) {
 174.226+                    followlinesButtons[i].classList.remove('btn-followlines-hidden');
 174.227+                }
 174.228+                // remove styles on selected lines
 174.229+                removeSelectedCSSClass();
 174.230+                resetButtons();
 174.231+            }
 174.232+
 174.233+            // bind cancel event to click on <button>
 174.234+            button.addEventListener('click', cancel);
 174.235+            // as well as on an click on any source line
 174.236+            buttonsAddEventListener(cancel);
 174.237+        }
 174.238+
 174.239+        buttonsAddEventListener(lineSelectEnd);
 174.240+
 174.241+    }
 174.242+
 174.243+    buttonsAddEventListener(lineSelectStart);
 174.244+
 174.245+    //** return a <div id="followlines"> and inner cancel <button> elements */
 174.246+    function followlinesBox(targetUri, fromline, toline, isHead) {
 174.247+        // <div id="followlines">
 174.248+        var div = document.createElement('div');
 174.249+        div.id = 'followlines';
 174.250+
 174.251+        //   <div class="followlines-cancel">
 174.252+        var buttonDiv = document.createElement('div');
 174.253+        buttonDiv.classList.add('followlines-cancel');
 174.254+
 174.255+        //     <button>x</button>
 174.256+        var button = document.createElement('button');
 174.257+        button.textContent = 'x';
 174.258+        buttonDiv.appendChild(button);
 174.259+        div.appendChild(buttonDiv);
 174.260+
 174.261+        //   <div class="followlines-link">
 174.262+        var aDiv = document.createElement('div');
 174.263+        aDiv.classList.add('followlines-link');
 174.264+        aDiv.textContent = 'follow history of lines ' + fromline + ':' + toline + ':';
 174.265+        var linesep = document.createElement('br');
 174.266+        aDiv.appendChild(linesep);
 174.267+        //     link to "ascending" followlines
 174.268+        var aAsc = document.createElement('a');
 174.269+        var url = targetUri + '?patch=&linerange=' + fromline + ':' + toline;
 174.270+        aAsc.setAttribute('href', url);
 174.271+        aAsc.textContent = 'older';
 174.272+        aDiv.appendChild(aAsc);
 174.273+
 174.274+        if (!isHead) {
 174.275+            var sep = document.createTextNode(' / ');
 174.276+            aDiv.appendChild(sep);
 174.277+            //     link to "descending" followlines
 174.278+            var aDesc = document.createElement('a');
 174.279+            aDesc.setAttribute('href', url + '&descend=');
 174.280+            aDesc.textContent = 'newer';
 174.281+            aDiv.appendChild(aDesc);
 174.282+        }
 174.283+
 174.284+        div.appendChild(aDiv);
 174.285+
 174.286+        return [div, button];
 174.287+    }
 174.288+
 174.289+}, false);
   175.1Binary file templates/static/hgicon.png has changed
   176.1Binary file templates/static/hglogo.png has changed
   177.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   177.2+++ b/templates/static/mercurial.js	Sat Jul 20 22:31:54 2024 -0400
   177.3@@ -0,0 +1,580 @@
   177.4+// mercurial.js - JavaScript utility functions
   177.5+//
   177.6+// Rendering of branch DAGs on the client side
   177.7+// Display of elapsed time
   177.8+// Show or hide diffstat
   177.9+//
  177.10+// Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
  177.11+// Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
  177.12+//
  177.13+// derived from code written by Scott James Remnant <scott@ubuntu.com>
  177.14+// Copyright 2005 Canonical Ltd.
  177.15+//
  177.16+// This software may be used and distributed according to the terms
  177.17+// of the GNU General Public License, incorporated herein by reference.
  177.18+
  177.19+var colors = [
  177.20+	[ 1.0, 0.0, 0.0 ],
  177.21+	[ 1.0, 1.0, 0.0 ],
  177.22+	[ 0.0, 1.0, 0.0 ],
  177.23+	[ 0.0, 1.0, 1.0 ],
  177.24+	[ 0.0, 0.0, 1.0 ],
  177.25+	[ 1.0, 0.0, 1.0 ]
  177.26+];
  177.27+
  177.28+function Graph() {
  177.29+
  177.30+	this.canvas = document.getElementById('graph');
  177.31+	this.ctx = this.canvas.getContext('2d');
  177.32+	this.ctx.strokeStyle = 'rgb(0, 0, 0)';
  177.33+	this.ctx.fillStyle = 'rgb(0, 0, 0)';
  177.34+	this.bg = [0, 4];
  177.35+	this.cell = [2, 0];
  177.36+	this.columns = 0;
  177.37+
  177.38+}
  177.39+
  177.40+Graph.prototype = {
  177.41+	reset: function() {
  177.42+		this.bg = [0, 4];
  177.43+		this.cell = [2, 0];
  177.44+		this.columns = 0;
  177.45+	},
  177.46+
  177.47+	scale: function(height) {
  177.48+		this.bg_height = height;
  177.49+		this.box_size = Math.floor(this.bg_height / 1.2);
  177.50+		this.cell_height = this.box_size;
  177.51+	},
  177.52+
  177.53+	setColor: function(color, bg, fg) {
  177.54+
  177.55+		// Set the colour.
  177.56+		//
  177.57+		// If color is a string, expect an hexadecimal RGB
  177.58+		// value and apply it unchanged. If color is a number,
  177.59+		// pick a distinct colour based on an internal wheel;
  177.60+		// the bg parameter provides the value that should be
  177.61+		// assigned to the 'zero' colours and the fg parameter
  177.62+		// provides the multiplier that should be applied to
  177.63+		// the foreground colours.
  177.64+		var s;
  177.65+		if(typeof color === "string") {
  177.66+			s = "#" + color;
  177.67+		} else { //typeof color === "number"
  177.68+			color %= colors.length;
  177.69+			var red = (colors[color][0] * fg) || bg;
  177.70+			var green = (colors[color][1] * fg) || bg;
  177.71+			var blue = (colors[color][2] * fg) || bg;
  177.72+			red = Math.round(red * 255);
  177.73+			green = Math.round(green * 255);
  177.74+			blue = Math.round(blue * 255);
  177.75+			s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
  177.76+		}
  177.77+		this.ctx.strokeStyle = s;
  177.78+		this.ctx.fillStyle = s;
  177.79+		return s;
  177.80+
  177.81+	},
  177.82+
  177.83+	edge: function(x0, y0, x1, y1, color, width) {
  177.84+
  177.85+		this.setColor(color, 0.0, 0.65);
  177.86+		if(width >= 0)
  177.87+			 this.ctx.lineWidth = width;
  177.88+		this.ctx.beginPath();
  177.89+		this.ctx.moveTo(x0, y0);
  177.90+		this.ctx.lineTo(x1, y1);
  177.91+		this.ctx.stroke();
  177.92+
  177.93+	},
  177.94+
  177.95+	graphNodeCurrent: function(x, y, radius) {
  177.96+		this.ctx.lineWidth = 2;
  177.97+		this.ctx.beginPath();
  177.98+		this.ctx.arc(x, y, radius * 1.75, 0, Math.PI * 2, true);
  177.99+		this.ctx.stroke();
 177.100+	},
 177.101+
 177.102+	graphNodeClosing: function(x, y, radius) {
 177.103+		this.ctx.fillRect(x - radius, y - 1.5, radius * 2, 3);
 177.104+	},
 177.105+
 177.106+	graphNodeUnstable: function(x, y, radius) {
 177.107+		var x30 = radius * Math.cos(Math.PI / 6);
 177.108+		var y30 = radius * Math.sin(Math.PI / 6);
 177.109+		this.ctx.lineWidth = 2;
 177.110+		this.ctx.beginPath();
 177.111+		this.ctx.moveTo(x, y - radius);
 177.112+		this.ctx.lineTo(x, y + radius);
 177.113+		this.ctx.moveTo(x - x30, y - y30);
 177.114+		this.ctx.lineTo(x + x30, y + y30);
 177.115+		this.ctx.moveTo(x - x30, y + y30);
 177.116+		this.ctx.lineTo(x + x30, y - y30);
 177.117+		this.ctx.stroke();
 177.118+	},
 177.119+
 177.120+	graphNodeObsolete: function(x, y, radius) {
 177.121+		var p45 = radius * Math.cos(Math.PI / 4);
 177.122+		this.ctx.lineWidth = 3;
 177.123+		this.ctx.beginPath();
 177.124+		this.ctx.moveTo(x - p45, y - p45);
 177.125+		this.ctx.lineTo(x + p45, y + p45);
 177.126+		this.ctx.moveTo(x - p45, y + p45);
 177.127+		this.ctx.lineTo(x + p45, y - p45);
 177.128+		this.ctx.stroke();
 177.129+	},
 177.130+
 177.131+	graphNodeNormal: function(x, y, radius) {
 177.132+		this.ctx.beginPath();
 177.133+		this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
 177.134+		this.ctx.fill();
 177.135+	},
 177.136+
 177.137+	vertex: function(x, y, radius, color, parity, cur) {
 177.138+		this.ctx.save();
 177.139+		this.setColor(color, 0.25, 0.75);
 177.140+		if (cur.graphnode[0] === '@') {
 177.141+			this.graphNodeCurrent(x, y, radius);
 177.142+		}
 177.143+		switch (cur.graphnode.substr(-1)) {
 177.144+			case '_':
 177.145+				this.graphNodeClosing(x, y, radius);
 177.146+				break;
 177.147+			case '*':
 177.148+				this.graphNodeUnstable(x, y, radius);
 177.149+				break;
 177.150+			case 'x':
 177.151+				this.graphNodeObsolete(x, y, radius);
 177.152+				break;
 177.153+			default:
 177.154+				this.graphNodeNormal(x, y, radius);
 177.155+		}
 177.156+		this.ctx.restore();
 177.157+
 177.158+		var left = (this.bg_height - this.box_size) + (this.columns + 1) * this.box_size;
 177.159+		var item = document.querySelector('[data-node="' + cur.node + '"]');
 177.160+		if (item) {
 177.161+			item.style.paddingLeft = left + 'px';
 177.162+		}
 177.163+	},
 177.164+
 177.165+	render: function(data) {
 177.166+
 177.167+		var i, j, cur, line, start, end, color, x, y, x0, y0, x1, y1, column, radius;
 177.168+
 177.169+		var cols = 0;
 177.170+		for (i = 0; i < data.length; i++) {
 177.171+			cur = data[i];
 177.172+			for (j = 0; j < cur.edges.length; j++) {
 177.173+				line = cur.edges[j];
 177.174+				cols = Math.max(cols, line[0], line[1]);
 177.175+			}
 177.176+		}
 177.177+		this.canvas.width = (cols + 1) * this.bg_height;
 177.178+		this.canvas.height = (data.length + 1) * this.bg_height - 27;
 177.179+
 177.180+		for (i = 0; i < data.length; i++) {
 177.181+
 177.182+			var parity = i % 2;
 177.183+			this.cell[1] += this.bg_height;
 177.184+			this.bg[1] += this.bg_height;
 177.185+
 177.186+			cur = data[i];
 177.187+			var fold = false;
 177.188+
 177.189+			var prevWidth = this.ctx.lineWidth;
 177.190+			for (j = 0; j < cur.edges.length; j++) {
 177.191+
 177.192+				line = cur.edges[j];
 177.193+				start = line[0];
 177.194+				end = line[1];
 177.195+				color = line[2];
 177.196+				var width = line[3];
 177.197+				if(width < 0)
 177.198+					 width = prevWidth;
 177.199+				var branchcolor = line[4];
 177.200+				if(branchcolor)
 177.201+					color = branchcolor;
 177.202+
 177.203+				if (end > this.columns || start > this.columns) {
 177.204+					this.columns += 1;
 177.205+				}
 177.206+
 177.207+				if (start === this.columns && start > end) {
 177.208+					fold = true;
 177.209+				}
 177.210+
 177.211+				x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
 177.212+				y0 = this.bg[1] - this.bg_height / 2;
 177.213+				x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
 177.214+				y1 = this.bg[1] + this.bg_height / 2;
 177.215+
 177.216+				this.edge(x0, y0, x1, y1, color, width);
 177.217+
 177.218+			}
 177.219+			this.ctx.lineWidth = prevWidth;
 177.220+
 177.221+			// Draw the revision node in the right column
 177.222+
 177.223+			column = cur.vertex[0];
 177.224+			color = cur.vertex[1];
 177.225+
 177.226+			radius = this.box_size / 8;
 177.227+			x = this.cell[0] + this.box_size * column + this.box_size / 2;
 177.228+			y = this.bg[1] - this.bg_height / 2;
 177.229+			this.vertex(x, y, radius, color, parity, cur);
 177.230+
 177.231+			if (fold) this.columns -= 1;
 177.232+
 177.233+		}
 177.234+
 177.235+	}
 177.236+
 177.237+};
 177.238+
 177.239+
 177.240+function process_dates(parentSelector){
 177.241+
 177.242+	// derived from code from mercurial/templatefilter.py
 177.243+
 177.244+	var scales = {
 177.245+		'year':  365 * 24 * 60 * 60,
 177.246+		'month':  30 * 24 * 60 * 60,
 177.247+		'week':    7 * 24 * 60 * 60,
 177.248+		'day':    24 * 60 * 60,
 177.249+		'hour':   60 * 60,
 177.250+		'minute': 60,
 177.251+		'second': 1
 177.252+	};
 177.253+
 177.254+	function format(count, string){
 177.255+		var ret = count + ' ' + string;
 177.256+		if (count > 1){
 177.257+			ret = ret + 's';
 177.258+		}
 177.259+ 		return ret;
 177.260+ 	}
 177.261+
 177.262+	function shortdate(date){
 177.263+		var ret = date.getFullYear() + '-';
 177.264+		// getMonth() gives a 0-11 result
 177.265+		var month = date.getMonth() + 1;
 177.266+		if (month <= 9){
 177.267+			ret += '0' + month;
 177.268+		} else {
 177.269+			ret += month;
 177.270+		}
 177.271+		ret += '-';
 177.272+		var day = date.getDate();
 177.273+		if (day <= 9){
 177.274+			ret += '0' + day;
 177.275+		} else {
 177.276+			ret += day;
 177.277+		}
 177.278+		return ret;
 177.279+	}
 177.280+
 177.281+ 	function age(datestr){
 177.282+ 		var now = new Date();
 177.283+ 		var once = new Date(datestr);
 177.284+		if (isNaN(once.getTime())){
 177.285+			// parsing error
 177.286+			return datestr;
 177.287+		}
 177.288+
 177.289+		var delta = Math.floor((now.getTime() - once.getTime()) / 1000);
 177.290+
 177.291+		var future = false;
 177.292+		if (delta < 0){
 177.293+			future = true;
 177.294+			delta = -delta;
 177.295+			if (delta > (30 * scales.year)){
 177.296+				return "in the distant future";
 177.297+			}
 177.298+		}
 177.299+
 177.300+		if (delta > (2 * scales.year)){
 177.301+			return shortdate(once);
 177.302+		}
 177.303+
 177.304+		for (var unit in scales){
 177.305+			if (!scales.hasOwnProperty(unit)) { continue; }
 177.306+			var s = scales[unit];
 177.307+			var n = Math.floor(delta / s);
 177.308+			if ((n >= 2) || (s === 1)){
 177.309+				if (future){
 177.310+					return format(n, unit) + ' from now';
 177.311+				} else {
 177.312+					return format(n, unit) + ' ago';
 177.313+				}
 177.314+			}
 177.315+		}
 177.316+	}
 177.317+
 177.318+	var nodes = document.querySelectorAll((parentSelector || '') + ' .age');
 177.319+	var dateclass = new RegExp('\\bdate\\b');
 177.320+	for (var i=0; i<nodes.length; ++i){
 177.321+		var node = nodes[i];
 177.322+		var classes = node.className;
 177.323+		var agevalue = age(node.textContent);
 177.324+		if (dateclass.test(classes)){
 177.325+			// We want both: date + (age)
 177.326+			node.textContent += ' ('+agevalue+')';
 177.327+		} else {
 177.328+			node.title = node.textContent;
 177.329+			node.textContent = agevalue;
 177.330+		}
 177.331+	}
 177.332+}
 177.333+
 177.334+function toggleDiffstat(event) {
 177.335+    var curdetails = document.getElementById('diffstatdetails').style.display;
 177.336+    var curexpand = curdetails === 'none' ? 'inline' : 'none';
 177.337+    document.getElementById('diffstatdetails').style.display = curexpand;
 177.338+    document.getElementById('diffstatexpand').style.display = curdetails;
 177.339+    event.preventDefault();
 177.340+}
 177.341+
 177.342+function toggleLinewrap(event) {
 177.343+    function getLinewrap() {
 177.344+        var nodes = document.getElementsByClassName('sourcelines');
 177.345+        // if there are no such nodes, error is thrown here
 177.346+        return nodes[0].classList.contains('wrap');
 177.347+    }
 177.348+
 177.349+    function setLinewrap(enable) {
 177.350+        var nodes = document.getElementsByClassName('sourcelines');
 177.351+        var i;
 177.352+        for (i = 0; i < nodes.length; i++) {
 177.353+            if (enable) {
 177.354+                nodes[i].classList.add('wrap');
 177.355+            } else {
 177.356+                nodes[i].classList.remove('wrap');
 177.357+            }
 177.358+        }
 177.359+
 177.360+        var links = document.getElementsByClassName('linewraplink');
 177.361+        for (i = 0; i < links.length; i++) {
 177.362+            links[i].innerHTML = enable ? 'on' : 'off';
 177.363+        }
 177.364+    }
 177.365+
 177.366+    setLinewrap(!getLinewrap());
 177.367+    event.preventDefault();
 177.368+}
 177.369+
 177.370+function format(str, replacements) {
 177.371+    return str.replace(/%(\w+)%/g, function(match, p1) {
 177.372+        return String(replacements[p1]);
 177.373+    });
 177.374+}
 177.375+
 177.376+function makeRequest(url, method, onstart, onsuccess, onerror, oncomplete) {
 177.377+    var xhr = new XMLHttpRequest();
 177.378+    xhr.onreadystatechange = function() {
 177.379+        if (xhr.readyState === 4) {
 177.380+            try {
 177.381+                if (xhr.status === 200) {
 177.382+                    onsuccess(xhr.responseText);
 177.383+                } else {
 177.384+                    throw 'server error';
 177.385+                }
 177.386+            } catch (e) {
 177.387+                onerror(e);
 177.388+            } finally {
 177.389+                oncomplete();
 177.390+            }
 177.391+        }
 177.392+    };
 177.393+
 177.394+    xhr.open(method, url);
 177.395+    xhr.overrideMimeType("text/xhtml; charset=" + document.characterSet.toLowerCase());
 177.396+    xhr.send();
 177.397+    onstart();
 177.398+    return xhr;
 177.399+}
 177.400+
 177.401+function removeByClassName(className) {
 177.402+    var nodes = document.getElementsByClassName(className);
 177.403+    while (nodes.length) {
 177.404+        nodes[0].parentNode.removeChild(nodes[0]);
 177.405+    }
 177.406+}
 177.407+
 177.408+function docFromHTML(html) {
 177.409+    var doc = document.implementation.createHTMLDocument('');
 177.410+    doc.documentElement.innerHTML = html;
 177.411+    return doc;
 177.412+}
 177.413+
 177.414+function appendFormatHTML(element, formatStr, replacements) {
 177.415+    element.insertAdjacentHTML('beforeend', format(formatStr, replacements));
 177.416+}
 177.417+
 177.418+function adoptChildren(from, to) {
 177.419+    var nodes = from.children;
 177.420+    var curClass = 'c' + Date.now();
 177.421+    while (nodes.length) {
 177.422+        var node = nodes[0];
 177.423+        node = document.adoptNode(node);
 177.424+        node.classList.add(curClass);
 177.425+        to.appendChild(node);
 177.426+    }
 177.427+    process_dates('.' + curClass);
 177.428+}
 177.429+
 177.430+function ajaxScrollInit(urlFormat,
 177.431+                        nextPageVar,
 177.432+                        nextPageVarGet,
 177.433+                        containerSelector,
 177.434+                        messageFormat,
 177.435+                        mode) {
 177.436+    var updateInitiated = false;
 177.437+    var container = document.querySelector(containerSelector);
 177.438+
 177.439+    function scrollHandler() {
 177.440+        if (updateInitiated) {
 177.441+            return;
 177.442+        }
 177.443+
 177.444+        var scrollHeight = document.documentElement.scrollHeight;
 177.445+        var clientHeight = document.documentElement.clientHeight;
 177.446+        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
 177.447+
 177.448+        if (scrollHeight - (scrollTop + clientHeight) < 50) {
 177.449+            updateInitiated = true;
 177.450+            removeByClassName('scroll-loading-error');
 177.451+            container.lastElementChild.classList.add('scroll-separator');
 177.452+
 177.453+            if (!nextPageVar) {
 177.454+                var message = {
 177.455+                    'class': 'scroll-loading-info',
 177.456+                    text: 'No more entries'
 177.457+                };
 177.458+                appendFormatHTML(container, messageFormat, message);
 177.459+                return;
 177.460+            }
 177.461+
 177.462+            makeRequest(
 177.463+                format(urlFormat, {next: nextPageVar}),
 177.464+                'GET',
 177.465+                function onstart() {
 177.466+                    var message = {
 177.467+                        'class': 'scroll-loading',
 177.468+                        text: 'Loading...'
 177.469+                    };
 177.470+                    appendFormatHTML(container, messageFormat, message);
 177.471+                },
 177.472+                function onsuccess(htmlText) {
 177.473+                    var doc = docFromHTML(htmlText);
 177.474+
 177.475+                    if (mode === 'graph') {
 177.476+                        var graph = window.graph;
 177.477+                        var dataStr = htmlText.match(/^\s*var data = (.*);$/m)[1];
 177.478+                        var data = JSON.parse(dataStr);
 177.479+                        graph.reset();
 177.480+                        adoptChildren(doc.querySelector('#graphnodes'), container.querySelector('#graphnodes'));
 177.481+                        graph.render(data);
 177.482+                    } else {
 177.483+                        adoptChildren(doc.querySelector(containerSelector), container);
 177.484+                    }
 177.485+
 177.486+                    nextPageVar = nextPageVarGet(htmlText);
 177.487+                },
 177.488+                function onerror(errorText) {
 177.489+                    var message = {
 177.490+                        'class': 'scroll-loading-error',
 177.491+                        text: 'Error: ' + errorText
 177.492+                    };
 177.493+                    appendFormatHTML(container, messageFormat, message);
 177.494+                },
 177.495+                function oncomplete() {
 177.496+                    removeByClassName('scroll-loading');
 177.497+                    updateInitiated = false;
 177.498+                    scrollHandler();
 177.499+                }
 177.500+            );
 177.501+        }
 177.502+    }
 177.503+
 177.504+    window.addEventListener('scroll', scrollHandler);
 177.505+    window.addEventListener('resize', scrollHandler);
 177.506+    scrollHandler();
 177.507+}
 177.508+
 177.509+function renderDiffOptsForm() {
 177.510+    // We use URLSearchParams for query string manipulation. Old browsers don't
 177.511+    // support this API.
 177.512+    if (!("URLSearchParams" in window)) {
 177.513+        return;
 177.514+    }
 177.515+
 177.516+    var form = document.getElementById("diffopts-form");
 177.517+
 177.518+    var KEYS = [
 177.519+        "ignorews",
 177.520+        "ignorewsamount",
 177.521+        "ignorewseol",
 177.522+        "ignoreblanklines",
 177.523+    ];
 177.524+
 177.525+    var urlParams = new window.URLSearchParams(window.location.search);
 177.526+
 177.527+    function updateAndRefresh(e) {
 177.528+        var checkbox = e.target;
 177.529+        var name = checkbox.id.substr(0, checkbox.id.indexOf("-"));
 177.530+        urlParams.set(name, checkbox.checked ? "1" : "0");
 177.531+        window.location.search = urlParams.toString();
 177.532+    }
 177.533+
 177.534+    var allChecked = form.getAttribute("data-ignorews") === "1";
 177.535+
 177.536+    for (var i = 0; i < KEYS.length; i++) {
 177.537+        var key = KEYS[i];
 177.538+
 177.539+        var checkbox = document.getElementById(key + "-checkbox");
 177.540+        if (!checkbox) {
 177.541+            continue;
 177.542+        }
 177.543+
 177.544+        var currentValue = form.getAttribute("data-" + key);
 177.545+        checkbox.checked = currentValue !== "0";
 177.546+
 177.547+        // ignorews implies ignorewsamount and ignorewseol.
 177.548+        if (allChecked && (key === "ignorewsamount" || key === "ignorewseol")) {
 177.549+            checkbox.checked = true;
 177.550+            checkbox.disabled = true;
 177.551+        }
 177.552+
 177.553+        checkbox.addEventListener("change", updateAndRefresh, false);
 177.554+    }
 177.555+
 177.556+    form.style.display = 'block';
 177.557+}
 177.558+
 177.559+function addDiffStatToggle() {
 177.560+    var els = document.getElementsByClassName("diffstattoggle");
 177.561+
 177.562+    for (var i = 0; i < els.length; i++) {
 177.563+        els[i].addEventListener("click", toggleDiffstat, false);
 177.564+    }
 177.565+}
 177.566+
 177.567+function addLineWrapToggle() {
 177.568+    var els = document.getElementsByClassName("linewraptoggle");
 177.569+
 177.570+    for (var i = 0; i < els.length; i++) {
 177.571+        var nodes = els[i].getElementsByClassName("linewraplink");
 177.572+
 177.573+        for (var j = 0; j < nodes.length; j++) {
 177.574+            nodes[j].addEventListener("click", toggleLinewrap, false);
 177.575+        }
 177.576+    }
 177.577+}
 177.578+
 177.579+document.addEventListener('DOMContentLoaded', function() {
 177.580+   process_dates();
 177.581+   addDiffStatToggle();
 177.582+   addLineWrapToggle();
 177.583+}, false);
   178.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   178.2+++ b/templates/static/style-extra-coal.css	Sat Jul 20 22:31:54 2024 -0400
   178.3@@ -0,0 +1,46 @@
   178.4+body {
   178.5+    background: black url('background.png') repeat-x;
   178.6+}
   178.7+
   178.8+.container {
   178.9+    padding-left: 0;
  178.10+    padding-right: 150px;
  178.11+}
  178.12+
  178.13+.main {
  178.14+    padding: 2em;
  178.15+    border-right: 15px solid black;
  178.16+    border-bottom: 15px solid black;
  178.17+}
  178.18+
  178.19+.menu {
  178.20+    background: #999;
  178.21+    padding: 10px;
  178.22+    width: 75px;
  178.23+    position: fixed;
  178.24+    top: 27px;
  178.25+    left: auto;
  178.26+    right: 27px;
  178.27+}
  178.28+
  178.29+.menu ul {
  178.30+    border-left: 0;
  178.31+}
  178.32+
  178.33+.menu li.active {
  178.34+    font-weight: normal;
  178.35+    background: black;
  178.36+    color: white;
  178.37+}
  178.38+
  178.39+.menu li.active a {
  178.40+    color: white;
  178.41+}
  178.42+
  178.43+h3 {
  178.44+    margin-top: -.7em;
  178.45+}
  178.46+
  178.47+div.description {
  178.48+    border-left-width: 3px;
  178.49+}
   179.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   179.2+++ b/templates/static/style-gitweb.css	Sat Jul 20 22:31:54 2024 -0400
   179.3@@ -0,0 +1,389 @@
   179.4+body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
   179.5+a { color:#0000cc; }
   179.6+a:hover, a:visited, a:active { color:#880000; }
   179.7+div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
   179.8+div.page_header a:visited { color:#0000cc; }
   179.9+div.page_header a:hover { color:#880000; }
  179.10+div.page_nav {
  179.11+    padding:8px;
  179.12+    display: flex;
  179.13+    justify-content: space-between;
  179.14+    align-items: center;
  179.15+}
  179.16+div.page_nav a:visited { color:#0000cc; }
  179.17+div.extra_nav {
  179.18+    padding: 8px;
  179.19+}
  179.20+div.extra_nav a:visited {
  179.21+    color: #0000cc;
  179.22+}
  179.23+div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
  179.24+div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
  179.25+div.page_footer_text { float:left; color:#555555; font-style:italic; }
  179.26+div.page_body { padding:8px; }
  179.27+div.title, a.title {
  179.28+	display:block; padding:6px 8px;
  179.29+	font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
  179.30+}
  179.31+a.title:hover { background-color: #d9d8d1; }
  179.32+div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
  179.33+div.log_body { padding:8px 8px 8px 150px; }
  179.34+.age { white-space:nowrap; }
  179.35+a.title span.age { position:relative; float:left; width:142px; font-style:italic; }
  179.36+div.log_link {
  179.37+	padding:0px 8px;
  179.38+	font-size:10px; font-family:sans-serif; font-style:normal;
  179.39+	position:relative; float:left; width:136px;
  179.40+}
  179.41+div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
  179.42+a.list { text-decoration:none; color:#000000; }
  179.43+a.list:hover { text-decoration:underline; color:#880000; }
  179.44+table { padding:8px 4px; }
  179.45+th { padding:2px 5px; font-size:12px; text-align:left; }
  179.46+.parity0 { background-color:#ffffff; }
  179.47+tr.dark, .parity1, pre.sourcelines.stripes > :nth-child(4n+4) { background-color:#f6f6f0; }
  179.48+tr.light:hover, .parity0:hover, tr.dark:hover, .parity1:hover,
  179.49+pre.sourcelines.stripes > :nth-child(4n+2):hover,
  179.50+pre.sourcelines.stripes > :nth-child(4n+4):hover,
  179.51+pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
  179.52+pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color:#edece6; }
  179.53+td { padding:2px 5px; font-size:12px; vertical-align:top; }
  179.54+td.closed { background-color: #99f; }
  179.55+td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
  179.56+td.indexlinks { white-space: nowrap; }
  179.57+td.indexlinks a {
  179.58+  padding: 2px 5px; line-height: 10px;
  179.59+  border: 1px solid;
  179.60+  color: #ffffff; background-color: #7777bb;
  179.61+  border-color: #aaaadd #333366 #333366 #aaaadd;
  179.62+  font-weight: bold;  text-align: center; text-decoration: none;
  179.63+  font-size: 10px;
  179.64+}
  179.65+td.indexlinks a:hover { background-color: #6666aa; }
  179.66+div.pre { font-family:monospace; font-size:12px; white-space:pre; }
  179.67+
  179.68+.search {
  179.69+    margin-right: 8px;
  179.70+}
  179.71+
  179.72+div#hint {
  179.73+  position: absolute;
  179.74+  display: none;
  179.75+  width: 250px;
  179.76+  padding: 5px;
  179.77+  background: #ffc;
  179.78+  border: 1px solid yellow;
  179.79+  border-radius: 5px;
  179.80+  z-index: 15;
  179.81+}
  179.82+
  179.83+#searchform:hover div#hint { display: block; }
  179.84+
  179.85+tr.thisrev a { color:#999999; text-decoration: none; }
  179.86+tr.thisrev pre { color:#009900; }
  179.87+td.annotate {
  179.88+  white-space: nowrap;
  179.89+}
  179.90+div.annotate-info {
  179.91+  z-index: 5;
  179.92+  display: none;
  179.93+  position: absolute;
  179.94+  background-color: #FFFFFF;
  179.95+  border: 1px solid #d9d8d1;
  179.96+  text-align: left;
  179.97+  color: #000000;
  179.98+  padding: 5px;
  179.99+}
 179.100+div.annotate-info a { color: #0000FF; text-decoration: underline; }
 179.101+td.annotate:hover div.annotate-info { display: inline; }
 179.102+
 179.103+#diffopts-form {
 179.104+  padding-left: 8px;
 179.105+  display: none;
 179.106+}
 179.107+
 179.108+.linenr { color:#999999; text-decoration:none }
 179.109+div.rss_logo { float: right; white-space: nowrap; }
 179.110+div.rss_logo a {
 179.111+	padding:3px 6px; line-height:10px;
 179.112+	border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
 179.113+	color:#ffffff; background-color:#ff6600;
 179.114+	font-weight:bold; font-family:sans-serif; font-size:10px;
 179.115+	text-align:center; text-decoration:none;
 179.116+}
 179.117+div.rss_logo a:hover { background-color:#ee5500; }
 179.118+pre { margin: 0; }
 179.119+span.logtags span {
 179.120+	padding: 0px 4px;
 179.121+	font-size: 10px;
 179.122+	font-weight: normal;
 179.123+	border: 1px solid;
 179.124+	background-color: #ffaaff;
 179.125+	border-color: #ffccff #ff00ee #ff00ee #ffccff;
 179.126+}
 179.127+span.logtags span.phasetag {
 179.128+	background-color: #dfafff;
 179.129+	border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
 179.130+}
 179.131+span.logtags span.obsoletetag {
 179.132+	background-color: #dddddd;
 179.133+	border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
 179.134+}
 179.135+span.logtags span.instabilitytag {
 179.136+	background-color: #ffb1c0;
 179.137+	border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
 179.138+}
 179.139+span.logtags span.tagtag {
 179.140+	background-color: #ffffaa;
 179.141+	border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
 179.142+}
 179.143+span.logtags span.branchtag {
 179.144+	background-color: #aaffaa;
 179.145+	border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
 179.146+}
 179.147+span.logtags span.inbranchtag {
 179.148+	background-color: #d5dde6;
 179.149+	border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
 179.150+}
 179.151+span.logtags span.bookmarktag {
 179.152+	background-color: #afdffa;
 179.153+	border-color: #ccecff #46ace6 #46ace6 #ccecff;
 179.154+}
 179.155+span.difflineplus { color:#008800; }
 179.156+span.difflineminus { color:#cc0000; }
 179.157+span.difflineat { color:#990099; }
 179.158+div.diffblocks { counter-reset: lineno; }
 179.159+div.diffblock { counter-increment: lineno; }
 179.160+pre.sourcelines { position: relative; counter-reset: lineno; }
 179.161+pre.sourcelines > span {
 179.162+	display: inline-block;
 179.163+	box-sizing: border-box;
 179.164+	width: 100%;
 179.165+	padding: 0 0 0 5em;
 179.166+	counter-increment: lineno;
 179.167+	vertical-align: top;
 179.168+}
 179.169+pre.sourcelines > span:before {
 179.170+	-moz-user-select: -moz-none;
 179.171+	-khtml-user-select: none;
 179.172+	-webkit-user-select: none;
 179.173+	-ms-user-select: none;
 179.174+	user-select: none;
 179.175+	display: inline-block;
 179.176+	margin-left: -6em;
 179.177+	width: 4em;
 179.178+	color: #999;
 179.179+	text-align: right;
 179.180+	content: counters(lineno,".");
 179.181+	float: left;
 179.182+}
 179.183+pre.sourcelines > a {
 179.184+	display: inline-block;
 179.185+	position: absolute;
 179.186+	left: 0px;
 179.187+	width: 4em;
 179.188+	height: 1em;
 179.189+}
 179.190+tr:target td,
 179.191+pre.sourcelines > span:target,
 179.192+pre.sourcelines.stripes > span:target {
 179.193+	background-color: #bfdfff;
 179.194+}
 179.195+
 179.196+.description {
 179.197+    font-family: monospace;
 179.198+    white-space: pre;
 179.199+}
 179.200+
 179.201+/* Followlines */
 179.202+tbody.sourcelines > tr.followlines-selected,
 179.203+pre.sourcelines > span.followlines-selected {
 179.204+  background-color: #99C7E9 !important;
 179.205+}
 179.206+
 179.207+div#followlines {
 179.208+  background-color: #FFF;
 179.209+  border: 1px solid #d9d8d1;
 179.210+  padding: 5px;
 179.211+  position: fixed;
 179.212+}
 179.213+
 179.214+div.followlines-cancel {
 179.215+  text-align: right;
 179.216+}
 179.217+
 179.218+div.followlines-cancel > button {
 179.219+  line-height: 80%;
 179.220+  padding: 0;
 179.221+  border: 0;
 179.222+  border-radius: 2px;
 179.223+  background-color: inherit;
 179.224+  font-weight: bold;
 179.225+}
 179.226+
 179.227+div.followlines-cancel > button:hover {
 179.228+  color: #FFFFFF;
 179.229+  background-color: #CF1F1F;
 179.230+}
 179.231+
 179.232+div.followlines-link {
 179.233+  margin: 2px;
 179.234+  margin-top: 4px;
 179.235+  font-family: sans-serif;
 179.236+}
 179.237+
 179.238+.btn-followlines {
 179.239+  position: absolute;
 179.240+  display: none;
 179.241+  cursor: pointer;
 179.242+  box-sizing: content-box;
 179.243+  font-size: 11px;
 179.244+  width: 13px;
 179.245+  height: 13px;
 179.246+  border-radius: 3px;
 179.247+  margin: 0px;
 179.248+  margin-top: -2px;
 179.249+  padding: 0px;
 179.250+  background-color: #E5FDE5;
 179.251+  border: 1px solid #9BC19B;
 179.252+  font-family: monospace;
 179.253+  text-align: center;
 179.254+  line-height: 5px;
 179.255+}
 179.256+
 179.257+span.followlines-select .btn-followlines {
 179.258+  margin-left: -1.6em;
 179.259+}
 179.260+
 179.261+.btn-followlines:hover {
 179.262+  transform: scale(1.1, 1.1);
 179.263+}
 179.264+
 179.265+.btn-followlines .followlines-plus {
 179.266+  color: green;
 179.267+}
 179.268+
 179.269+.btn-followlines .followlines-minus {
 179.270+  color: red;
 179.271+}
 179.272+
 179.273+.btn-followlines-end {
 179.274+  background-color: #ffdcdc;
 179.275+}
 179.276+
 179.277+.sourcelines tr:hover .btn-followlines,
 179.278+.sourcelines span.followlines-select:hover > .btn-followlines {
 179.279+  display: inline;
 179.280+}
 179.281+
 179.282+.btn-followlines-hidden,
 179.283+.sourcelines tr:hover .btn-followlines-hidden {
 179.284+  display: none;
 179.285+}
 179.286+
 179.287+/* Graph */
 179.288+div#wrapper {
 179.289+	position: relative;
 179.290+	margin: 0;
 179.291+	padding: 0;
 179.292+	margin-top: 3px;
 179.293+}
 179.294+
 179.295+canvas {
 179.296+	position: absolute;
 179.297+	z-index: 5;
 179.298+	top: -0.9em;
 179.299+	margin: 0;
 179.300+}
 179.301+
 179.302+ul#graphnodes {
 179.303+	list-style: none inside none;
 179.304+	padding: 0;
 179.305+	margin: 0;
 179.306+}
 179.307+
 179.308+ul#graphnodes li {
 179.309+	position: relative;
 179.310+	height: 37px;
 179.311+	overflow: visible;
 179.312+	padding-top: 2px;
 179.313+}
 179.314+
 179.315+ul#graphnodes li .fg {
 179.316+	position: absolute;
 179.317+	z-index: 10;
 179.318+}
 179.319+
 179.320+ul#graphnodes li .info {
 179.321+	font-size: 100%;
 179.322+	font-style: italic;
 179.323+}
 179.324+
 179.325+/* Comparison */
 179.326+.legend {
 179.327+    padding: 1.5% 0 1.5% 0;
 179.328+}
 179.329+
 179.330+.legendinfo {
 179.331+    border: 1px solid #d9d8d1;
 179.332+    font-size: 80%;
 179.333+    text-align: center;
 179.334+    padding: 0.5%;
 179.335+}
 179.336+
 179.337+.equal {
 179.338+    background-color: #ffffff;
 179.339+}
 179.340+
 179.341+.delete {
 179.342+    background-color: #faa;
 179.343+    color: #333;
 179.344+}
 179.345+
 179.346+.insert {
 179.347+    background-color: #ffa;
 179.348+}
 179.349+
 179.350+.replace {
 179.351+    background-color: #e8e8e8;
 179.352+}
 179.353+
 179.354+.comparison {
 179.355+    overflow-x: auto;
 179.356+}
 179.357+
 179.358+.header th {
 179.359+    text-align: center;
 179.360+}
 179.361+
 179.362+.block {
 179.363+    border-top: 1px solid #d9d8d1;
 179.364+}
 179.365+
 179.366+.scroll-loading {
 179.367+  -webkit-animation: change_color 1s linear 0s infinite alternate;
 179.368+  -moz-animation: change_color 1s linear 0s infinite alternate;
 179.369+  -o-animation: change_color 1s linear 0s infinite alternate;
 179.370+  animation: change_color 1s linear 0s infinite alternate;
 179.371+}
 179.372+
 179.373+@-webkit-keyframes change_color {
 179.374+  from { background-color: #A0CEFF; } to {  }
 179.375+}
 179.376+@-moz-keyframes change_color {
 179.377+  from { background-color: #A0CEFF; } to {  }
 179.378+}
 179.379+@-o-keyframes change_color {
 179.380+  from { background-color: #A0CEFF; } to {  }
 179.381+}
 179.382+@keyframes change_color {
 179.383+  from { background-color: #A0CEFF; } to {  }
 179.384+}
 179.385+
 179.386+.scroll-loading-error {
 179.387+    background-color: #FFCCCC !important;
 179.388+}
 179.389+
 179.390+#doc {
 179.391+    margin: 0 8px;
 179.392+}
   180.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   180.2+++ b/templates/static/style-monoblue.css	Sat Jul 20 22:31:54 2024 -0400
   180.3@@ -0,0 +1,588 @@
   180.4+/*** Initial Settings ***/
   180.5+* {
   180.6+  margin: 0;
   180.7+  padding: 0;
   180.8+  font-weight: normal;
   180.9+  font-style: normal;
  180.10+}
  180.11+
  180.12+html {
  180.13+  font-size: 100%;
  180.14+  font-family: sans-serif;
  180.15+}
  180.16+
  180.17+body {
  180.18+  font-size: 77%;
  180.19+  margin: 15px 50px;
  180.20+  background: #4B4B4C;
  180.21+}
  180.22+
  180.23+a {
  180.24+  color:#0000cc;
  180.25+  text-decoration: none;
  180.26+}
  180.27+/*** end of Initial Settings ***/
  180.28+
  180.29+
  180.30+/** common settings **/
  180.31+div#container {
  180.32+  background: #FFFFFF;
  180.33+  position: relative;
  180.34+  color: #666;
  180.35+}
  180.36+
  180.37+div.page-header {
  180.38+  padding: 50px 20px 0;
  180.39+  background: #006699 top left repeat-x;
  180.40+  position: relative;
  180.41+}
  180.42+  div.page-header h1 {
  180.43+    margin: 10px 0 30px;
  180.44+    font-size: 1.8em;
  180.45+    font-weight: bold;
  180.46+    font-family: osaka,'MS P Gothic', Georgia, serif;
  180.47+    letter-spacing: 1px;
  180.48+    color: #DDD;
  180.49+  }
  180.50+  div.page-header h1 a {
  180.51+    font-weight: bold;
  180.52+    color: #FFF;
  180.53+  }
  180.54+  div.page-header a {
  180.55+    text-decoration: none;
  180.56+  }
  180.57+
  180.58+  div.page-header form {
  180.59+    float: right;
  180.60+    margin-top: -2px;
  180.61+  }
  180.62+  div.page-header form label {
  180.63+    color: #DDD;
  180.64+  }
  180.65+  div.page-header form input {
  180.66+    padding: 2px;
  180.67+    border: solid 1px #DDD;
  180.68+  }
  180.69+  div.page-header form dl {
  180.70+    overflow: hidden;
  180.71+  }
  180.72+  div.page-header form dl dt {
  180.73+    font-size: 1.2em;
  180.74+  }
  180.75+  div.page-header form dl dt,
  180.76+  div.page-header form dl dd {
  180.77+    margin: 0 0 0 5px;
  180.78+    float: left;
  180.79+    height: 24px;
  180.80+    line-height: 20px;
  180.81+  }
  180.82+
  180.83+  ul.page-nav {
  180.84+    margin: 10px 0 0 0;
  180.85+    list-style-type: none;
  180.86+    overflow: hidden;
  180.87+  }
  180.88+    ul.page-nav li {
  180.89+      margin: 0 2px 0 0;
  180.90+      float: left;
  180.91+      width: 80px;
  180.92+      height: 24px;
  180.93+      font-size: 1.1em;
  180.94+      line-height: 24px;
  180.95+      text-align: center;
  180.96+    }
  180.97+    ul.page-nav li.current {
  180.98+      background: #FFF;
  180.99+    }
 180.100+    ul.page-nav li a {
 180.101+      height: 24px;
 180.102+      color: #666;
 180.103+      background: #DDD;
 180.104+      display: block;
 180.105+      text-decoration: none;
 180.106+    }
 180.107+    ul.page-nav li a:hover {
 180.108+      color:#333;
 180.109+      background: #FFF;
 180.110+    }
 180.111+
 180.112+ul.submenu {
 180.113+  margin: 10px 0 -10px 20px;
 180.114+  list-style-type: none;
 180.115+}
 180.116+ul.submenu li {
 180.117+  margin: 0 10px 0 0;
 180.118+  font-size: 1.2em;
 180.119+  display: inline;
 180.120+}
 180.121+
 180.122+h2 {
 180.123+  margin: 20px 0 10px;
 180.124+  height: 30px;
 180.125+  line-height: 30px;
 180.126+  text-indent: 20px;
 180.127+  background: #FFF;
 180.128+  font-size: 1.2em;
 180.129+  border-top: dotted 1px #D5E1E6;
 180.130+  font-weight: bold;
 180.131+}
 180.132+h2.no-link {
 180.133+  color:#006699;
 180.134+}
 180.135+h2.no-border {
 180.136+  color: #FFF;
 180.137+  background: #006699;
 180.138+  border: 0;
 180.139+}
 180.140+h2 a {
 180.141+  font-weight:bold;
 180.142+  color:#006699;
 180.143+}
 180.144+
 180.145+div.page-path {
 180.146+  text-align: right;
 180.147+  padding: 20px 30px 10px 0;
 180.148+  border:solid #d9d8d1;
 180.149+  border-width:0px 0px 1px;
 180.150+  font-size: 1.2em;
 180.151+}
 180.152+
 180.153+div.page-footer {
 180.154+  margin: 50px 0 0;
 180.155+  position: relative;
 180.156+}
 180.157+  div.page-footer p {
 180.158+    position: relative;
 180.159+    padding-left: 20px;
 180.160+    bottom: 5px;
 180.161+    font-size: 1.2em;
 180.162+  }
 180.163+
 180.164+  ul.rss-logo {
 180.165+    position: absolute;
 180.166+    top: -10px;
 180.167+    right: 20px;
 180.168+    height: 20px;
 180.169+    list-style-type: none;
 180.170+  }
 180.171+  ul.rss-logo li {
 180.172+    display: inline;
 180.173+  }
 180.174+  ul.rss-logo li a {
 180.175+    padding: 3px 6px;
 180.176+    line-height: 10px;
 180.177+    border:1px solid;
 180.178+    border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
 180.179+    color:#ffffff;
 180.180+    background-color:#ff6600;
 180.181+    font-weight:bold;
 180.182+    font-family:sans-serif;
 180.183+    font-size:10px;
 180.184+    text-align:center;
 180.185+    text-decoration:none;
 180.186+  }
 180.187+  div.rss-logo li a:hover {
 180.188+    background-color:#ee5500;
 180.189+  }
 180.190+
 180.191+p.normal {
 180.192+  margin: 20px 0 20px 30px;
 180.193+  font-size: 1.2em;
 180.194+}
 180.195+
 180.196+table {
 180.197+  margin: 10px 0 0 20px;
 180.198+  width: 95%;
 180.199+  border-collapse: collapse;
 180.200+}
 180.201+table tr td {
 180.202+  font-size: 1.1em;
 180.203+}
 180.204+table tr td.nowrap {
 180.205+  white-space: nowrap;
 180.206+}
 180.207+table tr td.closed {
 180.208+  background-color: #99f;
 180.209+}
 180.210+/*
 180.211+table tr.parity0:hover,
 180.212+table tr.parity1:hover {
 180.213+  background: #D5E1E6;
 180.214+}
 180.215+*/
 180.216+table tr.parity0,
 180.217+table td.annotate.parity0 {
 180.218+  background: #F1F6F7;
 180.219+}
 180.220+table tr.parity1,
 180.221+table td.annotate.parity1 {
 180.222+  background: #FFFFFF;
 180.223+}
 180.224+table tr td {
 180.225+  padding: 5px 5px;
 180.226+}
 180.227+table.annotated tr td {
 180.228+  padding: 0px 5px;
 180.229+}
 180.230+
 180.231+span.logtags span {
 180.232+  padding: 2px 6px;
 180.233+  font-weight: normal;
 180.234+  font-size: 11px;
 180.235+  border: 1px solid;
 180.236+  background-color: #ffaaff;
 180.237+  border-color: #ffccff #ff00ee #ff00ee #ffccff;
 180.238+}
 180.239+span.logtags span.phasetag {
 180.240+  background-color: #dfafff;
 180.241+  border-color: #e2b8ff #ce48ff #ce48ff #e2b8ff;
 180.242+}
 180.243+span.logtags span.obsoletetag {
 180.244+  background-color: #dddddd;
 180.245+  border-color: #e4e4e4 #a3a3a3 #a3a3a3 #e4e4e4;
 180.246+}
 180.247+span.logtags span.instabilitytag {
 180.248+  background-color: #ffb1c0;
 180.249+  border-color: #ffbbc8 #ff4476 #ff4476 #ffbbc8;
 180.250+}
 180.251+span.logtags span.tagtag {
 180.252+  background-color: #ffffaa;
 180.253+  border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
 180.254+}
 180.255+span.logtags span.branchtag {
 180.256+  background-color: #aaffaa;
 180.257+  border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
 180.258+}
 180.259+span.logtags span.inbranchtag {
 180.260+  background-color: #d5dde6;
 180.261+  border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
 180.262+}
 180.263+span.logtags span.bookmarktag {
 180.264+  background-color: #afdffa;
 180.265+  border-color: #ccecff #46ace6 #46ace6 #ccecff;
 180.266+}
 180.267+
 180.268+div.diff pre {
 180.269+  margin: 10px 0 0 0;
 180.270+}
 180.271+div.diff pre span {
 180.272+  font-family: monospace;
 180.273+  white-space: pre;
 180.274+  font-size: 1.2em;
 180.275+}
 180.276+div.diffblocks { counter-reset: lineno; }
 180.277+div.diffblock { counter-increment: lineno; }
 180.278+span.difflineplus { color:#008800; }
 180.279+span.difflineminus { color:#cc0000; }
 180.280+span.difflineat { color:#990099; }
 180.281+
 180.282+pre.sourcelines {
 180.283+    position: relative;
 180.284+    counter-reset: lineno;
 180.285+    font-size: 1.2em;
 180.286+}
 180.287+pre.sourcelines > span {
 180.288+    display: inline-block;
 180.289+    box-sizing: border-box;
 180.290+    width: 100%;
 180.291+    padding: 0 0 0 5em;
 180.292+    counter-increment: lineno;
 180.293+    vertical-align: top;
 180.294+}
 180.295+div.source > pre.sourcelines > span {
 180.296+    padding: 1px 1px 1px 5em;
 180.297+}
 180.298+pre.sourcelines > span:before {
 180.299+    -moz-user-select: -moz-none;
 180.300+    -khtml-user-select: none;
 180.301+    -webkit-user-select: none;
 180.302+    -ms-user-select: none;
 180.303+    user-select: none;
 180.304+    display: inline-block;
 180.305+    margin-left: -5em;
 180.306+    width: 4em;
 180.307+    color: #999;
 180.308+    text-align: right;
 180.309+    content: counters(lineno,".");
 180.310+    float: left;
 180.311+}
 180.312+pre.sourcelines > a {
 180.313+    display: inline-block;
 180.314+    position: absolute;
 180.315+    left: 0px;
 180.316+    width: 4em;
 180.317+    height: 1em;
 180.318+    padding: 0.15em;
 180.319+}
 180.320+pre.sourcelines.stripes > :nth-child(4n+2) { background-color: #F1F6F7; }
 180.321+pre.sourcelines.stripes > :nth-child(4n+4) { background-color: #FFFFFF; }
 180.322+pre.sourcelines.stripes > :nth-child(4n+2):hover,
 180.323+pre.sourcelines.stripes > :nth-child(4n+4):hover,
 180.324+pre.sourcelines.stripes > :nth-child(4n+1):hover + :nth-child(4n+2),
 180.325+pre.sourcelines.stripes > :nth-child(4n+3):hover + :nth-child(4n+4) { background-color: #D5E1E6; }
 180.326+
 180.327+tr:target td,
 180.328+pre.sourcelines > span:target,
 180.329+pre.sourcelines.stripes > span:target {
 180.330+    background-color: #bfdfff;
 180.331+}
 180.332+
 180.333+td.source {
 180.334+  white-space: pre;
 180.335+  margin: 10px 30px 0;
 180.336+  font-size: 1.2em;
 180.337+  font-family: monospace;
 180.338+}
 180.339+.linenr {
 180.340+  color: #999;
 180.341+  text-align: right;
 180.342+}
 180.343+.lineno {
 180.344+  text-align: right;
 180.345+}
 180.346+.lineno a {
 180.347+  color: #999;
 180.348+}
 180.349+td.linenr {
 180.350+  width: 60px;
 180.351+}
 180.352+tr.thisrev a { color:#999999; text-decoration: none; }
 180.353+tr.thisrev td.source { color:#009900; }
 180.354+td.annotate {
 180.355+  white-space: nowrap;
 180.356+}
 180.357+div.annotate-info {
 180.358+  display: none;
 180.359+  position: absolute;
 180.360+  background-color: #FFFFFF;
 180.361+  border: solid 1px #CCC;
 180.362+  text-align: left;
 180.363+  color: #666;
 180.364+  padding: 5px;
 180.365+}
 180.366+div.annotate-info a { color: #0000FF; }
 180.367+td.annotate:hover div.annotate-info { display: inline; }
 180.368+
 180.369+div#powered-by {
 180.370+  position: absolute;
 180.371+  width: 75px;
 180.372+  top: 15px;
 180.373+  right: 20px;
 180.374+  font-size: 1.2em;
 180.375+}
 180.376+div#powered-by a {
 180.377+  color: #EEE;
 180.378+  text-decoration: none;
 180.379+}
 180.380+div#powered-by a:hover {
 180.381+  text-decoration: underline;
 180.382+}
 180.383+/** end of common settings **/
 180.384+
 180.385+/** summary **/
 180.386+dl.overview {
 180.387+  margin: 0 0 0 30px;
 180.388+  font-size: 1.1em;
 180.389+  overflow: hidden;
 180.390+}
 180.391+  dl.overview dt,
 180.392+  dl.overview dd {
 180.393+    margin: 5px 0;
 180.394+    float: left;
 180.395+  }
 180.396+  dl.overview dt {
 180.397+    clear: left;
 180.398+    font-weight: bold;
 180.399+    width: 150px;
 180.400+  }
 180.401+/** end of summary **/
 180.402+
 180.403+/** chagelog **/
 180.404+h3.changelog {
 180.405+  margin: 20px 0 5px 30px;
 180.406+  padding: 0 0 2px;
 180.407+  font-size: 1.4em;
 180.408+  border-bottom: dotted 1px #D5E1E6;
 180.409+}
 180.410+ul.changelog-entry {
 180.411+  margin: 0 0 10px 30px;
 180.412+  list-style-type: none;
 180.413+  position: relative;
 180.414+}
 180.415+ul.changelog-entry li span.revdate {
 180.416+  font-size: 1.1em;
 180.417+}
 180.418+ul.changelog-entry li.age {
 180.419+  position: absolute;
 180.420+  top: -25px;
 180.421+  right: 10px;
 180.422+  font-size: 1.4em;
 180.423+  color: #CCC;
 180.424+  font-weight: bold;
 180.425+  font-style: italic;
 180.426+}
 180.427+ul.changelog-entry li span.name {
 180.428+  font-size: 1.2em;
 180.429+  font-weight: bold;
 180.430+}
 180.431+ul.changelog-entry li.description {
 180.432+  margin: 10px 0 0;
 180.433+  font-size: 1.1em;
 180.434+}
 180.435+/** end of changelog **/
 180.436+
 180.437+/** file **/
 180.438+p.files {
 180.439+  margin: 0 0 0 20px;
 180.440+  font-size: 2.0em;
 180.441+  font-weight: bold;
 180.442+}
 180.443+/** end of file **/
 180.444+
 180.445+/** changeset **/
 180.446+h3.changeset {
 180.447+  margin: 20px 0 5px 20px;
 180.448+  padding: 0 0 2px;
 180.449+  font-size: 1.6em;
 180.450+  border-bottom: dotted 1px #D5E1E6;
 180.451+}
 180.452+p.changeset-age {
 180.453+  position: relative;
 180.454+}
 180.455+p.changeset-age span {
 180.456+  position: absolute;
 180.457+  top: -25px;
 180.458+  right: 10px;
 180.459+  font-size: 1.4em;
 180.460+  color: #CCC;
 180.461+  font-weight: bold;
 180.462+  font-style: italic;
 180.463+}
 180.464+p.description {
 180.465+  margin: 10px 30px 0 30px;
 180.466+  padding: 10px;
 180.467+  border: solid 1px #CCC;
 180.468+  font-size: 1.2em;
 180.469+}
 180.470+/** end of changeset **/
 180.471+
 180.472+/** canvas **/
 180.473+div#wrapper {
 180.474+	position: relative;
 180.475+	font-size: 1.1em;
 180.476+}
 180.477+
 180.478+canvas {
 180.479+	position: absolute;
 180.480+	z-index: 5;
 180.481+	top: -0.7em;
 180.482+}
 180.483+
 180.484+ul#graphnodes li.parity0 {
 180.485+    background: #F1F6F7;
 180.486+}
 180.487+
 180.488+ul#graphnodes li.parity1 {
 180.489+    background: #FFFFFF;
 180.490+}
 180.491+
 180.492+ul#graphnodes {
 180.493+	list-style: none inside none;
 180.494+	margin: 0;
 180.495+	padding: 0;
 180.496+}
 180.497+
 180.498+ul#graphnodes li {
 180.499+	height: 37px;
 180.500+	overflow: visible;
 180.501+	padding-top: 2px;
 180.502+}
 180.503+
 180.504+ul#graphnodes li .fg {
 180.505+	position: absolute;
 180.506+	z-index: 10;
 180.507+}
 180.508+
 180.509+ul#graphnodes li .info {
 180.510+	margin-top: 2px;
 180.511+}
 180.512+/** end of canvas **/
 180.513+
 180.514+/** comparison **/
 180.515+.legend {
 180.516+    margin-left: 20px;
 180.517+    padding: 1.5% 0 1.5% 0;
 180.518+}
 180.519+
 180.520+.legendinfo {
 180.521+    border: 1px solid #999;
 180.522+    font-size: 80%;
 180.523+    text-align: center;
 180.524+    padding: 0.5%;
 180.525+}
 180.526+
 180.527+.equal {
 180.528+    background-color: #ffffff;
 180.529+}
 180.530+
 180.531+.delete {
 180.532+    background-color: #faa;
 180.533+    color: #333;
 180.534+}
 180.535+
 180.536+.insert {
 180.537+    background-color: #ffa;
 180.538+}
 180.539+
 180.540+.replace {
 180.541+    background-color: #e8e8e8;
 180.542+}
 180.543+
 180.544+.comparison {
 180.545+    overflow-x: auto;
 180.546+}
 180.547+
 180.548+.comparison table td {
 180.549+    padding: 0px 5px;
 180.550+}
 180.551+
 180.552+.header th {
 180.553+    font-weight: bold;
 180.554+}
 180.555+
 180.556+.block {
 180.557+    border-top: 1px solid #999;
 180.558+}
 180.559+/** end of comparison **/
 180.560+
 180.561+.breadcrumb a:hover {
 180.562+    text-decoration:underline;
 180.563+}
 180.564+
 180.565+.scroll-loading {
 180.566+  -webkit-animation: change_color 1s linear 0s infinite alternate;
 180.567+  -moz-animation: change_color 1s linear 0s infinite alternate;
 180.568+  -o-animation: change_color 1s linear 0s infinite alternate;
 180.569+  animation: change_color 1s linear 0s infinite alternate;
 180.570+}
 180.571+
 180.572+@-webkit-keyframes change_color {
 180.573+  from { background-color: #A0CEFF; } to {  }
 180.574+}
 180.575+@-moz-keyframes change_color {
 180.576+  from { background-color: #A0CEFF; } to {  }
 180.577+}
 180.578+@-o-keyframes change_color {
 180.579+  from { background-color: #A0CEFF; } to {  }
 180.580+}
 180.581+@keyframes change_color {
 180.582+  from { background-color: #A0CEFF; } to {  }
 180.583+}
 180.584+
 180.585+.scroll-loading-error {
 180.586+    background-color: #FFCCCC !important;
 180.587+}
 180.588+
 180.589+#doc {
 180.590+    margin: 0 30px;
 180.591+}
   181.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   181.2+++ b/templates/static/style-paper.css	Sat Jul 20 22:31:54 2024 -0400
   181.3@@ -0,0 +1,548 @@
   181.4+body {
   181.5+  margin: 0;
   181.6+  padding: 0;
   181.7+  background: white;
   181.8+  color: black;
   181.9+  font-family: sans-serif;
  181.10+}
  181.11+
  181.12+.container {
  181.13+  padding-left: 115px;
  181.14+}
  181.15+
  181.16+.main {
  181.17+  position: relative;
  181.18+  background: white;
  181.19+  padding: 2em 2em 2em 0;
  181.20+}
  181.21+
  181.22+#.main {
  181.23+  width: 98%;
  181.24+}
  181.25+
  181.26+.overflow {
  181.27+  width: 100%;
  181.28+  overflow: auto;
  181.29+}
  181.30+
  181.31+.menu {
  181.32+  width: 90px;
  181.33+  margin: 0;
  181.34+  font-size: 80%;
  181.35+  text-align: left;
  181.36+  position: absolute;
  181.37+  top: 20px;
  181.38+  left: 20px;
  181.39+  right: auto;
  181.40+}
  181.41+
  181.42+.menu ul {
  181.43+  list-style: none;
  181.44+  padding: 0;
  181.45+  margin: 10px 0 0 0;
  181.46+  border-left: 2px solid #999;
  181.47+}
  181.48+
  181.49+.menu li {
  181.50+  margin-bottom: 3px;
  181.51+  padding: 2px 4px;
  181.52+  background: white;
  181.53+  color: black;
  181.54+  font-weight: normal;
  181.55+}
  181.56+
  181.57+.menu li.active {
  181.58+  font-weight: bold;
  181.59+}
  181.60+
  181.61+.menu img {
  181.62+  width: 75px;
  181.63+  height: 90px;
  181.64+  border: 0;
  181.65+}
  181.66+
  181.67+div.atom-logo {
  181.68+  margin-top: 10px;
  181.69+}
  181.70+
  181.71+.atom-logo img{
  181.72+  width: 14px;
  181.73+  height: 14px;
  181.74+  border: 0;
  181.75+}
  181.76+
  181.77+.menu a { color: black; display: block; }
  181.78+
  181.79+.search {
  181.80+  position: absolute;
  181.81+  top: .7em;
  181.82+  right: 2em;
  181.83+}
  181.84+
  181.85+form.search div#hint {
  181.86+  display: none;
  181.87+  position: absolute;
  181.88+  top: 40px;
  181.89+  right: 0px;
  181.90+  width: 190px;
  181.91+  padding: 5px;
  181.92+  background: #ffc;
  181.93+  font-size: 70%;
  181.94+  border: 1px solid yellow;
  181.95+  border-radius: 5px;
  181.96+  z-index: 15;
  181.97+}
  181.98+
  181.99+form.search:hover div#hint { display: block; }
 181.100+
 181.101+a { text-decoration:none; }
 181.102+.age { white-space:nowrap; }
 181.103+.date { white-space:nowrap; }
 181.104+.indexlinks { white-space:nowrap; }
 181.105+.parity0,
 181.106+.stripes4 > :nth-child(4n+1),
 181.107+.stripes2 > :nth-child(2n+1) { background-color: #f0f0f0; }
 181.108+.parity1,
 181.109+.stripes4 > :nth-child(4n+3),
 181.110+.stripes2 > :nth-child(2n+2) { background-color: white; }
 181.111+.plusline { color: green; }
 181.112+.minusline { color: #dc143c; } /* crimson */
 181.113+.atline { color: purple; }
 181.114+
 181.115+.diffstat-table {
 181.116+  margin-top: 1em;
 181.117+}
 181.118+.diffstat-file {
 181.119+  white-space: nowrap;
 181.120+  font-size: 90%;
 181.121+}
 181.122+.diffstat-total {
 181.123+  white-space: nowrap;
 181.124+  font-size: 90%;
 181.125+}
 181.126+.diffstat-graph {
 181.127+  width: 100%;
 181.128+}
 181.129+.diffstat-add {
 181.130+  background-color: green;
 181.131+  float: left;
 181.132+}
 181.133+.diffstat-remove {
 181.134+  background-color: red;
 181.135+  float: left;
 181.136+}
 181.137+
 181.138+.navigate {
 181.139+  text-align: right;
 181.140+  font-size: 60%;
 181.141+  margin: 1em 0;
 181.142+}
 181.143+
 181.144+.phase {
 181.145+  color: #999;
 181.146+  font-size: 70%;
 181.147+  border-bottom: 1px dotted #999;
 181.148+  font-weight: normal;
 181.149+  margin-left: .5em;
 181.150+  vertical-align: baseline;
 181.151+}
 181.152+
 181.153+.obsolete {
 181.154+  color: #999;
 181.155+  font-size: 70%;
 181.156+  border-bottom: 1px dashed #999;
 181.157+  font-weight: normal;
 181.158+  margin-left: .5em;
 181.159+  vertical-align: baseline;
 181.160+}
 181.161+
 181.162+.instability {
 181.163+  color: #000;
 181.164+  font-size: 70%;
 181.165+  border-bottom: 1px solid #000;
 181.166+  font-weight: normal;
 181.167+  margin-left: .5em;
 181.168+  vertical-align: baseline;
 181.169+}
 181.170+
 181.171+.tag {
 181.172+  color: #999;
 181.173+  font-size: 70%;
 181.174+  font-weight: normal;
 181.175+  margin-left: .5em;
 181.176+  vertical-align: baseline;
 181.177+}
 181.178+
 181.179+.branchhead {
 181.180+  color: #000;
 181.181+  font-size: 80%;
 181.182+  font-weight: normal;
 181.183+  margin-left: .5em;
 181.184+  vertical-align: baseline;
 181.185+}
 181.186+
 181.187+ul#graphnodes .branchhead {
 181.188+  font-size: 75%;
 181.189+}
 181.190+
 181.191+.branchname {
 181.192+  color: #000;
 181.193+  font-size: 60%;
 181.194+  font-weight: normal;
 181.195+  margin-left: .5em;
 181.196+  vertical-align: baseline;
 181.197+}
 181.198+
 181.199+/* Common */
 181.200+pre { margin: 0; }
 181.201+
 181.202+h2 { font-size: 120%; border-bottom: 1px solid #999; }
 181.203+h2 a { color: #000; }
 181.204+h3 {
 181.205+  margin-top: +.7em;
 181.206+  font-size: 100%;
 181.207+}
 181.208+
 181.209+/* log and tags tables */
 181.210+.bigtable {
 181.211+  border-bottom: 1px solid #999;
 181.212+  border-collapse: collapse;
 181.213+  font-size: 90%;
 181.214+  width: 100%;
 181.215+  font-weight: normal;
 181.216+  text-align: left;
 181.217+}
 181.218+
 181.219+.bigtable td {
 181.220+  padding: 1px 4px;
 181.221+  vertical-align: top;
 181.222+}
 181.223+
 181.224+.bigtable th {
 181.225+  padding: 1px 4px;
 181.226+  border-bottom: 1px solid #999;
 181.227+}
 181.228+.bigtable tr { border: none; }
 181.229+.bigtable .age { width: 7em; }
 181.230+.bigtable .author { width: 15em; }
 181.231+.bigtable .description { }
 181.232+.bigtable .description .base { font-size: 70%; float: right; line-height: 1.66; }
 181.233+.bigtable .node { width: 5em; font-family: monospace;}
 181.234+.bigtable .permissions { width: 8em; text-align: left;}
 181.235+.bigtable .size { width: 5em; text-align: right; }
 181.236+.bigtable .annotate { text-align: right; }
 181.237+.bigtable td.annotate { font-size: smaller; }
 181.238+.bigtable td.source { font-size: inherit; }
 181.239+tr.thisrev a { color:#999999; text-decoration: none; }
 181.240+tr.thisrev td.source { color:#009900; }
 181.241+td.annotate {
 181.242+  white-space: nowrap;
 181.243+}
 181.244+div.annotate-info {
 181.245+  z-index: 5;
 181.246+  display: none;
 181.247+  position: absolute;
 181.248+  background-color: #FFFFFF;
 181.249+  border: 1px solid #999;
 181.250+  text-align: left;
 181.251+  color: #000000;
 181.252+  padding: 5px;
 181.253+}
 181.254+div.annotate-info a { color: #0000FF; }
 181.255+td.annotate:hover div.annotate-info { display: inline; }
 181.256+
 181.257+#diffopts-form {
 181.258+  font-size: smaller;
 181.259+  color: #424242;
 181.260+  padding-bottom: 10px;
 181.261+  display: none;
 181.262+}
 181.263+
 181.264+.source, .sourcefirst {
 181.265+  font-family: monospace;
 181.266+  white-space: pre;
 181.267+  padding: 1px 4px;
 181.268+  font-size: 90%;
 181.269+}
 181.270+.sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
 181.271+.source a { color: #999; font-size: smaller; font-family: monospace;}
 181.272+.bottomline { border-bottom: 1px solid #999; }
 181.273+
 181.274+.sourcelines {
 181.275+  font-size: 90%;
 181.276+  position: relative;
 181.277+  counter-reset: lineno;
 181.278+}
 181.279+
 181.280+.wrap > span {
 181.281+    white-space: pre-wrap;
 181.282+}
 181.283+
 181.284+.linewraptoggle {
 181.285+    float: right;
 181.286+}
 181.287+
 181.288+.diffblocks { counter-reset: lineno; }
 181.289+.diffblocks > div { counter-increment: lineno; }
 181.290+
 181.291+.sourcelines > span {
 181.292+  display: inline-block;
 181.293+  box-sizing: border-box;
 181.294+  width: 100%;
 181.295+  padding: 1px 0px 1px 5em;
 181.296+  counter-increment: lineno;
 181.297+}
 181.298+
 181.299+.sourcelines > span:before {
 181.300+  -moz-user-select: -moz-none;
 181.301+  -khtml-user-select: none;
 181.302+  -webkit-user-select: none;
 181.303+  -ms-user-select: none;
 181.304+  user-select: none;
 181.305+  display: inline-block;
 181.306+  margin-left: -6em;
 181.307+  width: 4em;
 181.308+  font-size: smaller;
 181.309+  color: #999;
 181.310+  text-align: right;
 181.311+  content: counters(lineno, ".");
 181.312+  float: left;
 181.313+}
 181.314+
 181.315+.sourcelines > span:after {
 181.316+  content: '';
 181.317+  display: inline-block;
 181.318+}
 181.319+
 181.320+.sourcelines > span:target, tr:target td {
 181.321+  background-color: #bfdfff;
 181.322+}
 181.323+
 181.324+/* Followlines */
 181.325+tbody.sourcelines > tr.followlines-selected,
 181.326+pre.sourcelines > span.followlines-selected {
 181.327+  background-color: #99C7E9;
 181.328+}
 181.329+
 181.330+div#followlines {
 181.331+  background-color: #FFF;
 181.332+  border: 1px solid #999;
 181.333+  padding: 5px;
 181.334+  position: fixed;
 181.335+}
 181.336+
 181.337+div.followlines-cancel {
 181.338+  text-align: right;
 181.339+}
 181.340+
 181.341+div.followlines-cancel > button {
 181.342+  line-height: 80%;
 181.343+  padding: 0;
 181.344+  border: 0;
 181.345+  border-radius: 2px;
 181.346+  background-color: inherit;
 181.347+  font-weight: bold;
 181.348+}
 181.349+
 181.350+div.followlines-cancel > button:hover {
 181.351+  color: #FFFFFF;
 181.352+  background-color: #CF1F1F;
 181.353+}
 181.354+
 181.355+div.followlines-link {
 181.356+  margin: 2px;
 181.357+  margin-top: 4px;
 181.358+  font-family: sans-serif;
 181.359+}
 181.360+
 181.361+.btn-followlines {
 181.362+  position: absolute;
 181.363+  display: none;
 181.364+  cursor: pointer;
 181.365+  box-sizing: content-box;
 181.366+  font-size: 12px;
 181.367+  width: 13px;
 181.368+  height: 13px;
 181.369+  border-radius: 3px;
 181.370+  margin: 0px;
 181.371+  margin-top: -2px;
 181.372+  padding: 0px;
 181.373+  background-color: #E5FDE5;
 181.374+  border: 1px solid #9BC19B;
 181.375+  font-family: monospace;
 181.376+  text-align: center;
 181.377+  line-height: 5px;
 181.378+}
 181.379+
 181.380+span.followlines-select .btn-followlines {
 181.381+  margin-left: -1.5em;
 181.382+}
 181.383+
 181.384+.btn-followlines:hover {
 181.385+  transform: scale(1.2, 1.2);
 181.386+}
 181.387+
 181.388+.btn-followlines .followlines-plus {
 181.389+  color: green;
 181.390+}
 181.391+
 181.392+.btn-followlines .followlines-minus {
 181.393+  color: red;
 181.394+}
 181.395+
 181.396+.btn-followlines-end {
 181.397+  background-color: #ffdcdc;
 181.398+}
 181.399+
 181.400+.sourcelines tr:hover .btn-followlines,
 181.401+.sourcelines span.followlines-select:hover > .btn-followlines {
 181.402+  display: inline;
 181.403+}
 181.404+
 181.405+.btn-followlines-hidden,
 181.406+.sourcelines tr:hover .btn-followlines-hidden {
 181.407+  display: none;
 181.408+}
 181.409+
 181.410+.sourcelines > a {
 181.411+    display: inline-block;
 181.412+    position: absolute;
 181.413+    left: 0px;
 181.414+    width: 4em;
 181.415+    height: 1em;
 181.416+}
 181.417+
 181.418+.fileline { font-family: monospace; }
 181.419+.fileline img { border: 0; }
 181.420+
 181.421+.tagEntry .closed { color: #99f; }
 181.422+
 181.423+/* Changeset entry */
 181.424+#changesetEntry {
 181.425+  border-collapse: collapse;
 181.426+  font-size: 90%;
 181.427+  width: 100%;
 181.428+  margin-bottom: 1em;
 181.429+}
 181.430+
 181.431+#changesetEntry th {
 181.432+  padding: 1px 4px;
 181.433+  width: 4em;
 181.434+  text-align: right;
 181.435+  font-weight: normal;
 181.436+  color: #999;
 181.437+  vertical-align: top;
 181.438+}
 181.439+
 181.440+div.description {
 181.441+  border-left: 2px solid #999;
 181.442+  margin: 1em 0 1em 0;
 181.443+  padding: .3em;
 181.444+  white-space: pre;
 181.445+  font-family: monospace;
 181.446+}
 181.447+
 181.448+/* Graph */
 181.449+div#wrapper {
 181.450+	position: relative;
 181.451+	border-top: 1px solid black;
 181.452+	border-bottom: 1px solid black;
 181.453+	margin: 0;
 181.454+	padding: 0;
 181.455+}
 181.456+
 181.457+canvas {
 181.458+	position: absolute;
 181.459+	z-index: 5;
 181.460+	top: -0.7em;
 181.461+	margin: 0;
 181.462+}
 181.463+
 181.464+ul#graphnodes {
 181.465+	list-style: none inside none;
 181.466+	padding: 0;
 181.467+	margin: 0;
 181.468+}
 181.469+
 181.470+ul#graphnodes li {
 181.471+	height: 39px;
 181.472+	overflow: visible;
 181.473+}
 181.474+
 181.475+ul#graphnodes li .fg {
 181.476+	position: absolute;
 181.477+	z-index: 10;
 181.478+}
 181.479+
 181.480+ul#graphnodes li .info {
 181.481+	font-size: 70%;
 181.482+}
 181.483+
 181.484+/* Comparison */
 181.485+.legend {
 181.486+    padding: 1.5% 0 1.5% 0;
 181.487+}
 181.488+
 181.489+.legendinfo {
 181.490+    border: 1px solid #999;
 181.491+    font-size: 80%;
 181.492+    text-align: center;
 181.493+    padding: 0.5%;
 181.494+}
 181.495+
 181.496+.equal {
 181.497+    background-color: #ffffff;
 181.498+}
 181.499+
 181.500+.delete {
 181.501+    background-color: #faa;
 181.502+    color: #333;
 181.503+}
 181.504+
 181.505+.insert {
 181.506+    background-color: #ffa;
 181.507+}
 181.508+
 181.509+.replace {
 181.510+    background-color: #e8e8e8;
 181.511+}
 181.512+
 181.513+.header {
 181.514+    text-align: center;
 181.515+}
 181.516+
 181.517+.block {
 181.518+    border-top: 1px solid #999;
 181.519+}
 181.520+
 181.521+.breadcrumb {
 181.522+    color: gray;
 181.523+}
 181.524+
 181.525+.breadcrumb a {
 181.526+    color: blue;
 181.527+}
 181.528+
 181.529+.scroll-loading {
 181.530+  -webkit-animation: change_color 1s linear 0s infinite alternate;
 181.531+  -moz-animation: change_color 1s linear 0s infinite alternate;
 181.532+  -o-animation: change_color 1s linear 0s infinite alternate;
 181.533+  animation: change_color 1s linear 0s infinite alternate;
 181.534+}
 181.535+
 181.536+@-webkit-keyframes change_color {
 181.537+  from { background-color: #A0CEFF; } to {  }
 181.538+}
 181.539+@-moz-keyframes change_color {
 181.540+  from { background-color: #A0CEFF; } to {  }
 181.541+}
 181.542+@-o-keyframes change_color {
 181.543+  from { background-color: #A0CEFF; } to {  }
 181.544+}
 181.545+@keyframes change_color {
 181.546+  from { background-color: #A0CEFF; } to {  }
 181.547+}
 181.548+
 181.549+.scroll-loading-error {
 181.550+    background-color: #FFCCCC !important;
 181.551+}
   182.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   182.2+++ b/templates/static/style.css	Sat Jul 20 22:31:54 2024 -0400
   182.3@@ -0,0 +1,117 @@
   182.4+a { text-decoration:none; }
   182.5+.age { white-space:nowrap; }
   182.6+.date { white-space:nowrap; }
   182.7+.indexlinks { white-space:nowrap; }
   182.8+.parity0 { background-color: #ddd; color: #000; }
   182.9+.parity1 { background-color: #eee; color: #000; }
  182.10+.lineno { width: 60px; color: #aaa; font-size: smaller;
  182.11+          text-align: right; }
  182.12+.plusline { color: green; }
  182.13+.minusline { color: red; }
  182.14+.atline { color: purple; }
  182.15+.annotate { font-size: smaller; text-align: right; padding-right: 1em; }
  182.16+tr.thisrev a { color:#999999; text-decoration: none; }
  182.17+tr.thisrev pre { color:#009900; }
  182.18+td.annotate {
  182.19+  white-space: nowrap;
  182.20+}
  182.21+div.annotate-info {
  182.22+  display: none;
  182.23+  position: absolute;
  182.24+  background-color: #FFFFFF;
  182.25+  border: 1px solid #888;
  182.26+  text-align: left;
  182.27+  color: #000000;
  182.28+  padding: 5px;
  182.29+}
  182.30+div.annotate-info a { color: #0000FF; }
  182.31+td.annotate:hover div.annotate-info { display: inline; }
  182.32+.buttons a {
  182.33+  background-color: #666;
  182.34+  padding: 2pt;
  182.35+  color: white;
  182.36+  font-family: sans-serif;
  182.37+  font-weight: bold;
  182.38+}
  182.39+.navigate a {
  182.40+  background-color: #ccc;
  182.41+  padding: 2pt;
  182.42+  font-family: sans-serif;
  182.43+  color: black;
  182.44+}
  182.45+
  182.46+.metatag {
  182.47+  background-color: #888;
  182.48+  color: white;
  182.49+  text-align: right;
  182.50+}
  182.51+
  182.52+/* Common */
  182.53+pre { margin: 0; }
  182.54+
  182.55+.logo {
  182.56+  float: right;
  182.57+  clear: right;
  182.58+}
  182.59+
  182.60+/* Changelog/Filelog entries */
  182.61+.logEntry { width: 100%; }
  182.62+.logEntry .age { width: 15%; }
  182.63+.logEntry th.label { width: 16em; }
  182.64+.logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
  182.65+.logEntry th.age, .logEntry th.firstline { font-weight: bold; }
  182.66+.logEntry th.firstline { text-align: left; width: inherit; }
  182.67+
  182.68+/* Shortlog entries */
  182.69+.slogEntry { width: 100%; }
  182.70+.slogEntry .age { width: 8em; }
  182.71+.slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
  182.72+.slogEntry td.author { width: 15em; }
  182.73+
  182.74+/* Tag entries */
  182.75+#tagEntries { list-style: none; margin: 0; padding: 0; }
  182.76+#tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
  182.77+
  182.78+/* Changeset entry */
  182.79+#changesetEntry { }
  182.80+#changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
  182.81+#changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
  182.82+
  182.83+/* File diff view */
  182.84+#filediffEntry { }
  182.85+#filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
  182.86+
  182.87+/* Graph */
  182.88+div#wrapper {
  182.89+	position: relative;
  182.90+	margin: 0;
  182.91+	padding: 0;
  182.92+}
  182.93+
  182.94+canvas {
  182.95+	position: absolute;
  182.96+	z-index: 5;
  182.97+	top: -0.6em;
  182.98+	margin: 0;
  182.99+}
 182.100+
 182.101+ul#graphnodes {
 182.102+	list-style: none inside none;
 182.103+	padding: 0;
 182.104+	margin: 0;
 182.105+}
 182.106+
 182.107+ul#graphnodes li {
 182.108+	height: 37px;
 182.109+	overflow: visible;
 182.110+	padding-top: 2px;
 182.111+}
 182.112+
 182.113+ul#graphnodes li .fg {
 182.114+	position: absolute;
 182.115+	z-index: 10;
 182.116+}
 182.117+
 182.118+ul#graphnodes li .info {
 182.119+	font-size: 70%;
 182.120+}